gpt4 book ai didi

java - 用EasyMock测试Observer的更新方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:14 25 4
gpt4 key购买 nike

我正在尝试测试是否调用了实现 Observer 接口(interface)的类中的 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);
}

不幸的是我收到以下错误:

Expectation failure on verify: ConcreteObserver.update(, ): expected: 1, actual: 0

关于如何解决这个问题有什么想法吗?

最佳答案

如果你想测试ConcreteObserver,请单独测试你的Subject;如果您想测试 Subject ,请这样做(假设 EasyMockimport static ):

@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);
}

关于java - 用EasyMock测试Observer的更新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24389654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com