2011-07-10 11 views
1

Je reçois l'erreur continue de IndexOutOfRangeException dans mon code C#. L'extrait de code est le suivant:Problème lié à 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*/) 
    { 
    } 
} 

Quelle peut être la raison probable de cela? Veuillez me pardonner si je peux donner l'idée que je ne suis pas cohérent avec mes concepts, parce que je suis vraiment nouveau dans cette affaire.

+0

Sur quelle ligne l'exception est lancée. –

+0

Assert.AreEqual (résultats [0] .AccountId, 2); Toutes les instructions assert.areequal donnent la même erreur. – ssingh

+0

Que diriez-vous de commencer avec un 'Assert.IsTrue (results.Count> 0)'? –

Répondre

4

Vous êtes apparemment en train d'écrire des tests unitaires. Le AssertFailedException indique qu'une de vos assertions a échoué, et il ne devrait pas être pris, car tout le point est que si une assertion échoue, tout votre test est censé échouer (il est inutile de continuer le test, parce que vous sait déjà que quelque chose ne va pas). En outre, lorsque vous interceptez une exception et que vous ne faites rien dans le bloc catch, vous dites en fait "si une exception est levée, ignorez-la et continuez". Ainsi, l'affirmation qui est supposée vérifier que le tableau contient effectivement quelque chose a fait son travail, mais vous l'avez fait taire et fait que le test continue même si le tableau est vide - d'où le IndexOutOfRangeException dans le bloc suivant try.

Retirez les try/catch blocs (en gardant le contenu des try blocs), et vous verrez votre test échoue et vous dire exactement ce qui ne va pas: le tableau est vide. La raison pour laquelle il est vide est soit qu'il y a un bug dans GetAggregateAccountSalesData() (excellent, le test vous a aidé à trouver un bug), ou que vous l'avez appelé incorrectement, ou que les données de test sont manquantes (existe-t-il des données de ventes de compte? agrégé?), ou que quelque chose n'est pas configuré correctement (avez-vous besoin d'appeler d'autres méthodes pour que GetAggregateAccountSalesData() fonctionne?) Essayez de déboguer le test et voyez ce qu'il se passe dans cette méthode.

+0

Merci pour l'aide. Ça a marché. – ssingh

+0

@ user837610: Content de l'entendre. Si vous êtes satisfait de la réponse, vous devez la marquer comme "acceptée" pour indiquer que les autres personnes n'ont pas besoin de passer du temps sur votre question. –