我想指出 Mockito 模拟的方法默认什么都不做,所以doNothing
这里是多余的。
我不想直接回答你的问题,而是想指出一些关于你的测试的事情。它模拟值类型,在这种情况下Employee
,一般来说,我会避免模拟任何值类型Employee
,如Offer
, Detail
, 等。
相反,由于您的测试似乎是关于利用有关数据的某些东西,我会编写一个测试,其中值类型是固定装置,并且输出的值类型数据将得到验证。
如果您需要模拟,您应该关注合作者(在行为意义上)。
例如想象以下设计(它是伪代码):
class OfferProcessor {
OfferClassifier classifie;
Offer...
...
process() { ... }
}
interface OfferClassifier {
classify()
}
class EmployeeOfferCalssifier extends OfferClassifier {
classify() { ... }
}
OfferProcessor
,显然是与合作者一起工作,它是你想要专注于他们之间交互的测试。例如,一项测试可以专注于所调用的分类、模拟OfferClassifier
和验证。classify
另一方面,OfferClassifier
女巫是一个看起来与操作数据有关的界面。因此,EmployeeOfferClassifier
我会将测试重点放在输入和输出数据上。
当然,现实可能有更复杂的粒度,但这种测试方法仍然适用。同样在@DavidWallace 在上面的评论中指出的文章中,如果使用工厂/提供者模式,可以使用相同的方法。