2013-04-15 73 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);