java - 在测试类中调用没有参数的测试方法

标签 java unit-testing testing junit mockito

我有一个类接受带有有效负载字符串的消息。 然后将有效载荷拆分并用于创建一个实体,该实体将传递给 DAOInterface 以持久保存。

如何测试调用daoInterface.insert(entity)

模拟 DAOInterface 然后验证对 DAO 的调用需要测试类中的实体,即

verify(daoInterface).insert(entity);

这是糟糕的设计,即在这个阶段创建实体吗?是否应该将 Sting[] 拆分传递给 DAOImplementaion 并在那里初始化。示例问题,

public class ServiceClass {

    @AutoWire
    private DAOInterface daoInterface;

    public void serviceMessage(Message<String> message) {

        MessageHeaders mh = new MessageHeaders(message.getHeaders());       
        String[] split = ((String) mh.get("payload")).split("_");

        code omitted
        ...

        String type = mh.get("WhatType");

        Entity entity = new Entity(split[0], split[1], split[2]);

        if (type.equals("one"))
        {
            daoInterface.insert(entity); //How to test?
        }
        else
        {
            if (type.equals("two"))
            {
                doaInterface.modify(entity); //How to test?
            }
        }
    }
}

最佳答案

你可以用 Mockito 验证 Matchers .

如果您只关心该方法是用 some Entity 调用的,则可以使用

进行验证
verify(daoInterface).insert(any(Entity.class));

如果你关心哪个Entity,并且Entity类有一个equals方法,你可以创建一个应该等于的实体创建并验证的那个

verify(daoInterface).insert(eq(expectedEntity);

如果它比这两种情况更复杂,您也可以编写自己的参数匹配器。

关于java - 在测试类中调用没有参数的测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24960408/

相关文章:

angular - 用 jest 测试 Angular 组件给出了resolveComponentResources

unit-testing - jsdom 9.1+ 在聚焦节点时不设置 document.activeElement

函数调用时Javascript模拟第三方 Node 库

api - GraphQL API - 任何用于测试它的自动化工具?

java - 如何在动画之前和之后执行 Action

java - 在 Tomcat 中使用 WebLogic JSP 编译器

java - 一个线程不会运行,直到另一个线程结束

java - 像Java一样在类内部定义C++方法

javascript - 无法使用实用 meteor :mocha - file structure issue 运行 meteor 测试

continuous-integration - MsTest 在文件夹中运行所有测试