2016-08-03 11 views
0

大きなArrayListを解析するメソッドを作るつもりです。 JUnitにテストメソッドを記述したいと思います。 ArrayListのサイズは、数百万に達する可能性があります。私は、データベースに接続するとテストが単体テストではないため、データベースに接続してそこからデータを取得して解析するのは良い考えではないと思います。だから私はこの状況で正しく行動すべきですか?または、単位テストでどれほど大きなデータを分析するのが一般的ですか?大きなArrayListをMockitoでモックする方法は?

例:

public void analyze(List<Double> list) { 

    double n1, n2, n3; 

    for (int i = 3; i < list.size(); i += 3) { 

     n1 = list.get(i - 3); 
     n2 = list.get(i - 2); 
     n3 = list.get(i - 1); 

     if (/* Some condition here using n1, n2, n3*/) { 
      list.remove(i); 
     } 
    } 
} 

@Test 
public void analyzeTest() { 

    List<Double> list = new ArrayList<Double>(); 

    // To add 1M data here. 

    analyze(list); 

    assertEquals(list, expected); 

} 
+0

あなたが否定的に投票したときにコメントを残してください。 – Vanguard

+0

なぜモックが必要なのですか?通常の 'ArrayList'を作成し、テストのセットアップ中に手作業で100万項目を入力するだけでいいはずです。 –

+0

@DanielPryden私は単なる単体テストをデータベースから分離したいと思っていました。そのような場合にデータベースに接続したり接続したりするのが正しい方法であるかどうかを確かめたいだけでした。 – Vanguard

答えて

2

として、クラスをテスト期待を追加し、サンプル・データを返すために@RunWith(JMockit.class)を追加データベースと会話する場合は単体テスト。

あなたは正しいです。

この状況では、どのように正しく動作する必要がありますか?

ArrayListオブジェクトを作成し、データで埋めてください。次に、このデータに対してテストして、本番コードが意図したとおりに動作することを確認します。何百万ものエントリは必要ありません。異なるケースをカバーする最小値はanalyze()です。

単位テストでどの程度大きなデータを分析するのが一般的ですか?データベースなどの外部リソースなしで、あなたのコードのロジックを検証し、 -

  1. ユニットテスト:

良い習慣は、複数のテストのレベルを有することがあります。

  • 統合テスト - システムの異なる部分(例:データベース、Webサーバー、APIなど)が互いに正しく相互作用することを確認します。
  • パフォーマンステスト - ストレスや大量のデータでシステムがどのように動作するかを検証します。これには特別なツールがあります(jMeter、gatling)。
  • -2

    こんにちは、あなたはこのように使用することができます: fleResultが結果を返すデータベースまたはサービスオブジェクトです。 そして、そのクラスのメソッドのparam

    @Test 
    public void testGetLogEvents(@Mocked final LogRecProcess fleResult, 
    

    として嘲笑し、テストではない配列

    new Expectations() { 
         { 
          fleResult.getEvents(); 
          result = Arrays.asList(new FilteredLogEvent[] { evnt }); 
         } 
        }; 
    
    +1

    タイプミス、コンパイル不可能なコード、JMockのいくつかの兆候、OPが尋ねるMockitoの兆候はない。この答えは役に立たないようです。 –

    +0

    私は完全なコードではなく答えを与えました。問題を解決するコードはありません。一部の人は修正できます。これはどのように役に立つとは思わないのですか?タイプミス以外の理由はありますか? – Anand

    関連する問題