java - Mockito:TestStub 和 Mock 之间的区别

标签 java mockito

我知道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/

相关文章:

Java Web 应用程序部署失败

java - 是否可以使用 Mockito 抛出抽象异常?

java - 获取您在 JPanel 上单击的位置的颜色?

Java 1.8 安全点超时

java - 带有范围边界查询的 Cassandra BoundStatement

java - 我怎么知道是否在被测单元上调用了方法?

elasticsearch - 任何 java.lang.NullPointerException 时的 Mockito

java - 如何模拟在测试方法中创建的对象?

unit-testing - 无法模拟 Glassfish Jersey 客户端响应对象

java - 我必须从多次调用的函数中返回一个值,但我无法做到这一点