我有service
,方法是:
Entity entity = new Entity(new Date(), 1, 2L);
return entityRepository.save(entity);
还有我的考验:
@Test
public void testSaveEntity() {
Entity entity = new Entity(new Date(), 1, 2L);
entityService.saveEntity(1, 2L);
verify(entityRepository, times(1)).save(entity);
}
如果Entity
equals()
未比较Date
,则一切正常,但如果比较Date
,则测试会抛出Argument(s) are different!
4条答案
按热度按时间dfuffjeb1#
据我所知,不可能更改服务和实体,那么在这种情况下,最好在
Mockito
中使用ArgumentMatcher<>
。步骤1:
在这里你可以把
equals
作为比较对象。mathces
可以是ovveride
。我认为一秒钟的差别就足够了。步骤2:
**其他情况:**在其他测试中,很可能会出现这种情况,即此
entity
也需要检查when
2eafrhcq2#
您有两个选项:
选项1:使用Clock类控制时间
不要使用
new Date()
:Clock
示例注入到服务中Clock.fixed
控制当前时间请参阅Guide to the Java Clock Class
选项1:放宽匹配要求
使用Mockito ArgumentMatchers来放宽匹配要求-使用
any(YourEntity.class)
来匹配任何YourEntity
,或为实体编写自定义参数匹配器。bpsygsoo3#
equals
方法的定义可能有问题。您应该定义在何种情况下两个不同的实体被视为相等:**只有当两个实体的日期值在相同的范围内时,它们才相等
毫秒,还是我们只关心秒、分钟或天?**
与处理浮点值类似,此可接受的差异可以类似于Calculating the difference between two Java date instances进行计算
ubof19bj4#
不要依赖解决方案中使用的
equals
方法:您可以尝试捕获参数并在下一步中Assert它,如Verify object attribute value with mockito中所述