EasyMock:带回调参数的方法

时间:2013-05-04 10:37:25

标签: java unit-testing easymock

我有这样的情况:

class A {
  void methodA(Callback cb) {
    ...
    cb.onResult(result);
  }
}

class B {
  void methodB(A a) {
    a.methodA(new Callback() {
      void onResult(Result r) {
        ...
      }
    });
  }
}

问题是:如何使用EasyMock测试“B.methodB”与“结果”不同?

2 个答案:

答案 0 :(得分:2)

您可以capture传递给Callback

methodA
Capture<Callback> cap = new Capture<Callback>();
mockA.methodA(capture(cap));
replay(mockA);
instanceOfB.methodB(mockA);
Callback cb = cap.getValue();

// now we can call cb.onResult with a mocked Result instance

答案 1 :(得分:0)

你能重构一下,以便更容易测试吗?

class B {
  void methodB(A a) {
    a.methodA(new Callback() {
      void onResult(Result r) {
        onResultFromA(r);
      }
    });
  }
  void onResultFromA(Result r) {
  }
}

然后只测试onResultFromA()

你真的不关心r来自哪里,只是你用它做了正确的事情?

或者你呢?