我有一些简单的代码,将对象设置为PROCESSING状态,执行一些操作,然后将其设置为SUCCESS。我想验证PROCESSING保存是否使用了正确的值。Mockito通过测试中途验证状态
问题是执行verify()测试时,在对象上调用.equals()
,因为它在测试结束时调用,而不是中途调用。
例如代码:
public void process(Thing thing) {
thing.setValue(17);
thing.setStatus(Status.PROCESSING);
dao.save(thing);
doSomeMajorProcessing(thing);
thing.setStatus(Status.SUCCESS);
dao.save(thing);
}
欲测试:
public void test() {
Thing actual = new Thing();
processor.process(actual);
Thing expected = new Thing();
expected.setValue(17);
expected.setStatus(Status.PROCESSING);
verify(dao).save(expected);
// ....
expected.setStatus(Status.SUCCESS);
verify(dao).save(expected);
}
在第一验证,actual.getStatus()
是Status.SUCCESS
,作为的Mockito只是不断到的对象的引用和只能测试这是最后的价值。
我曾考虑过,如果when(...)
涉及那么.equals()
将在正确的时间被调用,并且结果只会发生在Thing是我想要的东西时。但是,在这种情况下,.save()
不会返回任何内容。
如何验证对象是否进入正确的状态?
你能解释一下,你就会把你的匹配,解决了什么问题? – Steve
@Steve:我编辑我的答案是更明确。 –
您是否缺少verify()或when()?我不明白Matcher是如何在测试结束时解决验证问题的,而不是半途而废。 – Steve