2011-07-10 19 views
1

私のC#コードでIndexOutOfRangeExceptionの連続エラーが発生しています。コードスニペットは次のとおりです。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(results [0] .AccountId、2); すべてのassert.areequalステートメントで同じエラーが発生しています。 – ssingh

+0

'Assert.IsTrue(results.Count> 0)'で始めるのはどうですか? –

答えて

4

あなたは明らかにユニットテストを書いています。 AssertFailedExceptionは、あなたのアサーションの1つが失敗したことを示します。アサーションが失敗した場合、テスト全体が失敗するはずであるため、ではありません。すでに何かが間違っていることを知っている)。さらに、例外をキャッチしてcatchブロック内に何もしないと、「例外がスローされた場合は無視して処理してください」と効果的に言います。したがって、配列に実際に何かが含まれているかどうかを確認するアサーションは、その仕事をしましたが、配列が空であってもテストを続行しました。したがって、次のtryブロックのIndexOutOfRangeExceptionです。

try/ catchブロック( tryブロックの内容を保つ)を削除し、あなたのテストに失敗参照し、間違っている正確に何を教えてくれます:配列が空です。空である理由は、 GetAggregateAccountSalesData()にバグがあり(優秀、テストでバグを発見するのに役立ちました)、間違って呼び出した、またはテストデータが欠落している(アカウントの売上データが存在する可能性があります)何かが何らかの形で正しく設定されていない(何か別の方法を呼び出して GetAggregateAccountSalesData()が動作する必要がありますか?)テストをデバッグし、そのメソッド内で何が起こるかを見てください。

+0

助けてくれてありがとう。出来た。 – ssingh

+0

@ user837610:それを聞いてうれしいです。答えに満足すれば、他の人があなたの質問に時間を費やす必要がないことを示すために、それを「受け入れられた」とマークする必要があります。 –