java - 使用 EasyMock 进行单元测试时出现意外的方法调用

标签 java unit-testing easymock

我正在使用 UnitilsJUnit4 和 EasyMock 测试代码中的邮件功能。

我的代码是这样的..

public void prepare(MimeMessage mimeMessage) {
// some code ..
MimeMessageHelper message = new MimeMessageHelper( mimeMessage, true );
// some mail settings ..

}

当我测试方法prepare时,它给出了以下异常..但下面显示的方法来自Spring框架类。

java.lang.AssertionError: 
  Unexpected method call setContent(javax.mail.internet.MimeMultipart@6e616e61):
    setContent(javax.mail.internet.MimeMultipart@2dda2dda): expected: 1, actual: 0
    at $javax.mail.internet.MimeMessage$$EnhancerByCGLIB$$614de43f.setContent(<generated>)
    at org.springframework.mail.javamail.MimeMessageHelper.createMimeMultiparts(MimeMessageHelper.java:344)
    at org.springframework.mail.javamail.MimeMessageHelper.<init>(MimeMessageHelper.java:290)
    at org.springframework.mail.javamail.MimeMessageHelper.<init>(MimeMessageHelper.java:247)
    at org.springframework.mail.javamail.MimeMessageHelper.<init>(MimeMessageHelper.java:226)

请帮我解决上述问题..如何测试我的方法?

最佳答案

我知道这是很久以前写的,但我刚刚遇到了同样的问题。

如果您可以以某种形式模拟 MimeMessageHelper,则可以轻松测试代码。为此,我创建了一个接口(interface),该接口(interface)仅提供回 MimeMessageHelper 类,并将其添加为我正在测试的类的依赖项。

界面:

public interface MimeMessageHelperProvider {
    MimeMessageHelper getMimeMessageHelper(MimeMessage mimeMessage);
}

实现:

public class MimeMessageHelperProviderImpl implements MimeMessageHelperProvider {
    @Override
    public MimeMessageHelper getMimeMessageHelper(MimeMessage mimeMessage) {
        return new MimeMessageHelper(mimeMessage);
    }
}

现在您可以连接 MimeMessageHelperProvider 并简单地模拟该接口(interface),让它返回您可以验证的实例。

关于java - 使用 EasyMock 进行单元测试时出现意外的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429997/

相关文章:

java - Google API 创建实例 - 字段 'resource.machineType' 的值无效

java - Play Framework 2.2.2 - Java - 使用模拟对象测试 Controller

java - Log4J2:以编程方式修改 Appenders 配置

java - 尝试用 Ant 编译

java - 如何处理 ByteBuffer 中的索引越界异常

java - 如何使用 JUnit 对时间相关方法进行单元测试

unit-testing - 用于测试的假 X 服务器?

python - Django TestCase 测试顺序

java - 使用 easymock 注入(inject)静态方法/字段?

java - 有什么办法可以代替动态方法吗?