编程语言
首页 > 编程语言> > java – Unittest包装器方法是否有意义

java – Unittest包装器方法是否有意义

作者:互联网

这个问题有些哲学.鉴于我有这样的方法:

public List<String> getStuffByName(@NotNull String name) throws SomeException {
        return someDependency.createQuery().byName(name).list().stream()
                .map(execution -> execution.getProcessInstanceId())
                .collect(Collectors.toList());
}

基本上它所做的只是调用依赖方法,然后使用流api处理它.

单元测试 – 严格理解(?) – 仅测试一个隔离单元.
所以我会模仿依赖关系,因为我认为它们本身也已经过测试.

如果我完成这个,我最终会得到一个专门由其他地方测试的东西组成的方法.

例如,我的JMockit测试看起来像这样:

public void test_get_processes_for_bkey_2(@Mocked ExecutionQuery query,
                                              @Mocked List<String> processes,
                                              @Mocked List<Execution> executions,
                                              @Mocked Stream<Execution> e_stream,
                                              @Mocked Stream<String> pid_stream,
                                              @Mocked Stream<String> pdef_stream

    ) {
    new Expectations() {
        {
            someDependency.createQuery(); result = query;
            query.byName("somefilter"); result = query;
            query.list(); result = executions;
            executions.stream(); result = e_stream;
            e_stream.map((Function) any); result = fin_stream;
            fin_stream.collect((Collector) any); result = processes;
            processes.size(); result = 2;
        }
    };

    assertEquals(tested.getStuffByName("somefilter").size(), 2);
}

但是这个测试真的告诉我什么?

在测试驱动开发中,我会省略对这种“包装”方法的测试吗?

独立于Jmockit或其他框架,专业的测试方法是什么?

解决方法:

测试这个的“专业方法”是不要嘲笑任何东西.一个好的测试应该尽可能真实,同时保持足够快速和稳定.

单元测试(在纯/严格意义上,单元通过模拟与其依赖关系隔离)被高估.这不只是我说的;像Kent Beck(TDD的主要“创造者”)和Martin Fowler这样的作者也不是“纯粹”单元测试的粉丝(例如,参见Is TDD Dead?).

模拟最好用于特殊情况,出于实际原因,如果没有它,你就不能轻易编写测试.根据我自己的经验,集成测试(没有或最少的模拟)已经证明要好得多.

标签:java,unit-testing,jmockit
来源: https://codeday.me/bug/20190528/1170011.html