2013-04-15 74 views
3

我正在爲DAO類編寫單元測試,我剛剛做了一些更改。由於這個DAO的性能非常重要,所以我想在單元測試中對性能進行一些檢查。而且由於我對這個DAO的更改可能會導致多次查詢,我想檢查一下DAO是否只查詢DB一次。否則,單元測試應該失敗。檢查DAO在單元測試中的性能/查詢次數

我不知道這是否可能。請幫助:)

回答

0

時間測試,你可以使用

時間調出註釋等。

@Test(超時= 500)

1

測試在單元測試中的表現是怎麼回事,除非你複製了真實的DB和它的有效載荷是無用的。當然,你可以測量執行查詢所花費的時間,但這是什麼結果呢?您在單元測試中執行的查詢,如何轉換爲真實數據庫的查詢?

你可以測量的是你的新查詢如何在單元測試中相對於舊查詢改變。我會使用一個框架(你必須考慮到JVM熱身在這裏,可能是框架有一些緩存也需要預熱),我會建議:Caliper

此外,如果您有查詢只需要對DB執行一次,聽起來就像你需要一個緩存。如果這不是太複雜,你可以看看

Cache

0

你可以注入代碼(使用aspectJ例如)來計算DB訪問 - 當你查詢數據庫的計數器加需要時間觀測值。

一個簡單的解決辦法是在實例測試方面的DAO時使用匿名類:

DAObject dao = new DAObject(){ 
         @override 
         public void QueryDB(args){ 
          incrementCounter(); 
          long startTime = System.currentTimeMillis(); 
          super.QueryDB(args); 
          _queryTime = System.currentTimeMillis() - startTime; 
         } 
        } 

然後

assertEquels(counter,1); 
assertTrue(_queryTime < MAX_ALLOWED_TIME);