我正在尝试测试是否调用了实现Observer接口的类中的update方法。我正在使用EasyMock来模拟ConcreteObserver,以便我可以验证他的更新函数是否真正执行。
这是我的主题,Observable类:
public class Subject extends java.util.Observable {
public funcA() {
...
notifyObservers(this,aVariable);
...
}
}
我有以下类,即观察者:
public class ConcreteObserver implements java.util.Observer {
public ConcreteObserver(Subject subject) {
subject.observer(this);
}
@Override
public void update(Observable o, Object arg) {
// TODO
}
}
这是我的单元测试:
@Test
public void testUpdateFunction() {
Subject subj = new Subject();
ConcreteObserver mockedObserver = EasyMock.
createMockBuilder(ConcreteObserver.class).
withConstructor(subj).
addMockedMethod("update").
createMock();
mockedObserver.update((Observable) EasyMock.anyObject(),EasyMock.anyObject());
EasyMock.replay(mockedObserver);
subj.funcA();
EasyMock.verify(mockedObserver);
}
不幸的是我收到以下错误:
验证时出现预期失败:ConcreteObserver.update(,):expected:1,actual:0
有关如何解决此问题的任何想法?
答案 0 :(得分:1)
如果您要对ConcreteObserver
进行单独测试Subject
测试;如果您想测试Subject
,请执行此操作(假定import static
为EasyMock
):
@Test
public void testUpdateFunction()
{
Subject subject = new Subject();
Observer observer = createMock(Observer.class);
observer.update(eq(subject), anyObject());
replay(observer);
subject.observer(observer);
subject.funcA();
verify(observer);
}