2016-08-03 128 views
0

我打算做一個分析大的ArrayList的方法。我想在JUnit中編寫測試方法。 ArrayList的大小可能高達數百萬。我認爲連接數據庫並從那裏獲取數據進行分析並不是一個好主意,因爲如果與數據庫交談,測試不是單元測試。那麼我應該如何在這種情況下正確行事?或者一般的單元測試分析了多大的數據?如何通過Mockito模擬大ArrayList?

例子:

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'並且手動填充一百萬個條目應該沒問題。 –

+0

@DanielPryden我只是想將我的單元測試與數據庫隔離開來。我只是想確保在這種情況下連接或不連接數據庫是否正確。 – Vanguard

回答

2

測試是不一個單元測試是否與數據庫對話

你說得對。

那麼我該如何在這種情況下正確行事?

創建一個ArrayList對象並填充數據。然後根據這些數據進行測試,以確定您的生產代碼按預期行事。您不需要數百萬條目,只是覆蓋analyze()不同情況的最低限度。

單元測試通常會分析多大的數據?

一個好的做法是,測試的多個層次:

  1. 單元測試 - 驗證代碼的邏輯,無需外部資源,如數據庫。
  2. 集成測試 - 驗證系統的不同部分(例如:數據庫,Web服務器,api等)相互正確交互。
  3. 性能測試 - 驗證您的系統在壓力或大量數據下的行爲。這裏有特殊的工具(jMeter,gatling)。
-2

你好,你可以使用這樣的: fleResult是您的數據庫或服務對象,返回結果。 這類嘲笑作爲方法PARAM

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

並添加@RunWith(JMockit.class)來測試類中,添加期望和返回示例數據作爲陣列

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

錯字,不可編譯的代碼,JMock的一些跡象以及OP詢問的沒有Mockito的跡象。這個答案似乎沒有用處。 –

+0

我給出的答案不是完整的代碼。沒有給出有關解決該問題的代碼。錯別字有些人可以修復。你怎麼說這似乎沒有用處?除了錯字之外的其他原因? – Anand