我知道mockito中的teststub只是用于控制测试替身的输入和输出
与此相反,模拟必须验证方法调用,这对于测试至关重要
假设我们要测试 sendMessage
() 方法:
public void sendMessage(Client client,Template template) {
String msgContent=templateEngine.prepareMessage(template,client);
mailserver.send(client.getEmail(),msgContent);
}
现在我的问题:
mailserver.send
() 方法对于 sendMessage
至关重要,并且必须作为模拟进行验证。没关系对我来说。但是为什么 templateEngine.prepareMessage()
应该设计为 teststub 呢?我知道我们只需要 msgContent
对象作为 mailserver.send()
的参数,但我不应该验证 perepareMessage()
code>-方法被调用?
最佳答案
一个测试应该专注于一件事。该方法是关于发送的,因此测试应该验证这一点。
如果您将消息准备纳入验证,则您已将两者绑定(bind)在一起。当您现在重构代码以在另一种方法中进行消息准备时,您必须更改测试,尽管发送部分没有任何变化。
顺便说一句:如果在此过程中出现问题,send()
将不会执行,并且测试为红色。
关于java - Mockito:TestStub 和 Mock 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312688/