2011-07-10 5 views
1

Я получаю непрерывную ошибку IndexOutOfRangeException в моем коде C#. Ниже приведен фрагмент кода:Проблема, связанная с IndexOutOfRangeException

public void GetAccountSalesDataTestWithAccountsIncluded() 
{ 
    AccountSalesDataRepository target = new AccountSalesDataRepository(); 
    AccountSalesDataSearchCriteria[] searchCriteria = new AccountSalesDataSearchCriteria[2] 
    { 
     new AccountSalesDataSearchCriteria 
     { 
      ProgramAccountId = new AccountSalesDataSearchCriteria.SearchCriteria<int>[1] { new AccountSalesDataSearchCriteria.SearchCriteria<int>(98, true) } 
     }, 
     new AccountSalesDataSearchCriteria() 
    }; 

    AccountSalesDataSummary[] results; 
    results = target.GetAggregateAccountSalesData(searchCriteria, true); 
    try 
    { 
     Assert.IsNotNull(results, "The result set should not be null with the given account"); 
     Assert.IsTrue(results.Length > 0, "The result set should not be empty with given account"); 
    } 
    catch (AssertFailedException /*ex*/) 
    { 
    } 
    this.AccountSalesDataSummaryBasicTest(results, true); 
    try 
    { 
     Assert.AreEqual(results[0].AccountId, 2); 
     Assert.AreEqual(results[0].TotalPurchaseAmount, decimal.Parse("200"), "The total purchase amount is incorrect"); 
     Assert.AreEqual(results[0].TotalPurchaseQuantity, 2000, "The total purchase quantity is incorrect"); 
     Assert.AreEqual(results[0].TotalSaleQuantity, double.Parse("200"), "The total sales quantity is incorrect"); 
     Assert.AreEqual(results[0].TotalSalesAmount, decimal.Parse("20"), "The total sales amount is incorrect"); 
    } 
    catch (AssertFailedException /*ex*/) 
    { 
    } 
} 

Что может быть вероятной причиной этого?

Прошу простить меня, если я могу дать понять, что я не согласен с моими концепциями, потому что я действительно новичок в этом.

+0

В какой строке выбрано исключение. –

+0

Assert.AreEqual (результаты [0] .AccountId, 2); Все утверждения assert.areequal дают такую ​​же ошибку. – ssingh

+0

Как насчет запуска с 'Assert.IsTrue (results.Count> 0)'? –

ответ

4

Вы, по-видимому, пишите блок-тесты. AssertFailedException указывает, что одно из ваших утверждений потерпело неудачу, и должно быть уловлено не, потому что вся суть в том, что если утверждение терпит неудачу, весь ваш тест должен потерпеть неудачу (нет смысла продолжать тест, потому что вы уже знают, что что-то не так). Кроме того, когда вы поймаете исключение и ничего не делаете в блоке catch, вы эффективно говорите «если вызывается исключение, просто игнорируйте его и продолжайте». Таким образом, утверждение, которое должно проверять, что массив действительно содержит что-то, выполнило свою работу, но вы отключили его и проверили проверку, даже если массив пуст - следовательно, IndexOutOfRangeException в следующем блоке try.

Удалите try/catch блоки (сохраняя содержание try блоков), и вы увидите, ваш тест не в состоянии и сказать вам точно, что это не так: массив пуст. Причина, по которой она пуста, заключается в том, что есть ошибка в GetAggregateAccountSalesData() (отлично, тест помог вам найти ошибку), или что вы вызвали его неправильно, или что данные теста отсутствуют (существуют ли данные о продажах учетной записи, которые могут быть агрегированный?) или что-то некорректно настроено (вам нужно вызвать некоторые другие методы для того, чтобы работать GetAggregateAccountSalesData()?) Попробуйте отладить тест и посмотрите, что происходит внутри этого метода.

+0

Спасибо за помощь. Это сработало. – ssingh

+0

@ user837610: Рад это услышать. Если вы удовлетворены ответом, вы должны отметить его как «принятый», чтобы указать, что другим людям не нужно тратить время на ваш вопрос. –

Смежные вопросы