相关疑难解决方法(0)

Mockito匹配器如何工作?

争论的Mockito匹配器(如any,argThat,eq,same,和ArgumentCaptor.capture())表现非常不同,从Hamcrest匹配器.

  • Mockito匹配器经常导致InvalidUseOfMatchersException,即使在使用任何匹配器后执行很长时间的代码中也是如此.

  • Mockito匹配器受到奇怪的规则的影响,例如,如果给定方法中的一个参数使用匹配器,则只需要对所有参数使用Mockito匹配器.

  • 当覆盖Answers或使用(Integer) any()等时,Mockito匹配器可能会导致NullPointerException .

  • 使用Mockito匹配器以某种方式重构代码可能会产生异常和意外行为,并且可能完全失败.

为什么Mockito匹配器是这样设计的,它们是如何实现的?

java mocking mockito

112
推荐指数
2
解决办法
11万
查看次数

如何在不使用任何数据库的情况下测试Hibernate条件查询?

我正在开发一个包含大量复杂Hibernate标准查询的Java应用程序.我想测试这些标准,以确保他们选择正确的,只有正确的对象.当然,其中一种方法是建立内存数据库(例如HSQL),并在每次测试中使用条件对该数据库进行往返,然后断言查询结果符合我的期望.

但我正在寻找一个更简单的解决方案,因为Hibernate标准只是一种关于Java对象的特殊逻辑谓词.因此,理论上,它们可以在不访问任何数据库的情况下进行测试.例如,假设有一个名为的实体Cat:

class Cat {
    Cat(String name, Integer age){
        this.name = name;
        this.age = age;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情来创建条件查询:

InMemoryCriteria criteria = InMemoryCriteria.forClass(Cat.class)
   .add(Restrictions.like("name", "Fritz%"))
   .add(Restrictions.or(
      Restrictions.eq("age", new Integer(0)),
      Restrictions.isNull("age")))

assertTrue(criteria.apply(new Cat("Foo", 0)))
assertTrue(criteria.apply(new Cat("Fritz Lang", 12)))
assertFalse(criteria.apply(new Cat("Foo", 12)))
Run Code Online (Sandbox Code Playgroud)

标准可以在生产代码中使用,如下所示:

criteria.getExecutableCriteria(session); //similar to DetachedCriteria
Run Code Online (Sandbox Code Playgroud)

是否有任何Java库可以进行此类测试?

unit-testing hibernate-criteria

10
推荐指数
1
解决办法
1万
查看次数