与Mockito模拟回调和听众



我正在尝试测试一个类,该类可以调用一个方法,然后从响应中等待听众。

这些是交互式内部的接口。当我调用 fetch时,其中一个侦听器被回电。

interface Interactor {
    void fetch(int offset, int size);
}
interface InteractorListener {
    void onReady(List<Result> results);
    void onError();
}
public class MyInteractor implements Interactor{
    private ImageInteractorListener listener;
    public MyInteractor() {}
    public onAttach(ImageInteractorListener listener) {
        this.listener = listener;
    }
    public void fetch(int offset, int size) {
        // Make asyncrhonous task
        // and manage the response in the next method
    }
    public void onAsyncroouTaskResponse() {
        if (someChecks) {
            listener.onReady(List<Result> results);
        } else {
            listener.onError();
        }
    }
}
public class MyClass implements ImageInteractorListener {
    public MyClass() {
        MyInteractor interactor = new Interactor();
        interactor.onAttach(this);
        interactor.fetch(1,1);
    }
    @Override
    void onReady(List<Result> results) {
        // doThings
    }
    @override
    void onError() {
        // doThings
    }
}

这就是我的课程的方式。我需要测试MyClass,所以我需要模拟互动器回调

我尝试了不同的问题,所以现在我没有最终代码或错误。但是没有人可以工作..

谢谢。

假设您正在测试MyClass您可以手动调用您的回调

// Test that errors are handled
// Given
Interactor interactor = mock(Interactor.class);
MyClass myClass = new MyClass(interactor);
// When
interactor.fetch(0, 0); // this call is optional, I just added it for clarity
myClass.onError();
// Then
// verify something

dimitry的方法很好,我个人不会称呼fetch,因为您的onAsyncroouTaskResponse()是公开的,我会称之为verify(yourmock).onError()或类似于确保它被称为。

有时我做出的另一种方法是创建一个" TestableSubject",它只是class extends YourOriginalClass,您可以在其中覆盖某些方法并保留其称为或类似的次数的数量。有时,由于某些课程的性质,您无法嘲笑它们(最终,抽象的东西,私人等)。

如果您想要的(也许应该)测试是在完成异步任务后,请回电(无论结果如何),那么我会跳过获取部分在另一项测试中的工作,但我认为您在后面的一部分更感兴趣。

相关内容

  • 没有找到相关文章

最新更新