检查DAO在单元测试中查询的性能/次数

时间:2013-04-15 06:51:19

标签: java unit-testing

我正在为DAO类编写单元测试,我刚刚对其进行了一些更改。由于这个DAO的性能非常重要,所以我想对单元测试中的性能进行一些检查。并且因为我对此DAO的更改可能导致多次查询,我想检查DAO是否只查询数据库一次。如果没有,单元测试应该失败。

我不知道这是否可行。请帮助:)

3 个答案:

答案 0 :(得分:1)

除非您复制真实数据库及其有效负载,否则在单元测试中测试性能将毫无用处。当然,您可以测量执行查询所需的时间,但这是什么结果呢?您在单元测试中执行的查询,如何转换为真实数据库的查询?

您可以衡量的是您的新查询在单元测试中如何针对旧查询进行更改。我会使用一个框架(你必须在这里考虑JVM热身,可能是框架有一些需要预热的缓存),我建议:Caliper

此外,如果您只需要对数据库执行一次查询,则听起来非常像您需要缓存。如果它不是太复杂你可以看看

Cache

答案 1 :(得分:0)

时间测试你可以使用

超时注释,如。

@Test(超时= 500)

答案 2 :(得分:0)

您可以注入代码(例如使用aspectJ)来计算数据库访问权限 - 每当您查询数据库增加计数器并花时间测量时。

更简单的解决方案是在测试环境中实例化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);