如何对回调逻辑进行单元测试?

And*_*ite 12 java unit-testing callback

更完整的问题是,给定一个期望回调作为参数的依赖项,如何编写覆盖回调逻辑的单元测试仍设法模拟依赖项?

public class DoStuff {
    public void runThis(Runnable callback) {
        // call callback
    }
}

public class ClassUnderTest {
    private DoStuff stuffToDo;

    public void methodUnderTest() {
        this.stuffToDo.runThis(/*a runnable with some logic*/)
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我会模拟,stuffToDo因为我应该验证方法调用的调用和模拟输出.但是,runThis模拟导致回调逻辑未被测试.此外,回调逻辑似乎应该是私有的,所以我不希望直接测试它; 或许这对我来说是一种误解.

由于回调被相当广泛地使用,我希望有一种常用的方法来测试它们,但我还没有找到它.

hvg*_*des 10

你不能在一次测试中.如果你嘲笑的东西,它的嘲笑,这意味着它只能验证参数和模拟返回值(您在测试配置).

实际上,模拟某事的全部意义在于测试单独使用模拟的内容.如果你想进行单元测试DoStuff,你不必担心使用一些可能会或可能不起作用的回调实现.你嘲笑回调,所以你不必担心它.

您还可以通过测试孤立的回调代码,有很好的测试,并通过抛出集成测试的好办法,在您使用的完全配置的组件作为隔离测试回调用户(使用回调一个模拟),也许整个.