如何正确模拟观察者接口?

问题描述 投票:0回答:1

我在测试类中有一个存根测试,用于测试观察者接口。这是我的测试类,用于测试notifyObserver。知道如何正确模拟观察者吗?

//应该使用库为接口Observer正确创建模拟对象。

@ExtendWith(MockitoExtension.class)
class MockTest {
static class TestObserver implements Observer {

    public Vector objv = new Vector();
    int updateCount = 0;

    @Override
    public void update(Observable o, Object arg) {
        ++updateCount;
        objv.add(arg);
    }

    public int updateCount() {
        return updateCount;
    }
}

static class TestObservable extends Observable {
    public void doChange() {
        setChanged();
        System.out.println("Change status with setChanged :" + hasChanged());
        notifyObservers();
    }

    public void clearChange() {
        clearChanged();
    }
}


@Test
public void testNotifyObservers() {
    // Test for method void java.util.Observable.notifyObservers()
    TestObservable observable;
    observable = new TestObservable();

    Observer observer = Mockito.mock(TestObserver.class);
    observable.addObserver(observer = new TestObserver());
    observable.notifyObservers();
    assertEquals(0, ((TestObserver) observer).updateCount());

    ((TestObservable) observable).doChange();
    observable.notifyObservers();
    assertEquals(1, ((TestObserver) observer).updateCount());
    //Mockito.verify(observer).;
}
java mocking mockito observer-pattern junit5
1个回答
0
投票

如果我理解正确,则无需使用模仿对象来模仿对象。我稍微清理了一下您的测试方法:

@Test
public void testNotifyObservers() {
    // Test for method void java.util.Observable.notifyObservers()
    TestObservable observable = new TestObservable();
    TestObserver observer = new TestObserver();
    observable.addObserver(observer);
    observable.notifyObservers();
    assertEquals(0, observer.updateCount());

    observable.doChange();
    observable.notifyObservers();
    assertEquals(1, observer.updateCount());
}

使用Mockito.spy():

@Test
public void testNotifyObservers() {
    // Test for method void java.util.Observable.notifyObservers()
    TestObservable observable = new TestObservable();
    TestObserver observer = Mockito.spy(TestObserver.class);
    observable.addObserver(observer);
    observable.notifyObservers();
    assertEquals(0, observer.updateCount());

    observable.doChange();
    observable.notifyObservers();
    assertEquals(1, observer.updateCount());

    Mockito.verify(observer, Mockito.times(2)).updateCount();
    Mockito.verify((Observer) observer, Mockito.times(1)).update(any(), any());
    Mockito.verifyNoMoreInteractions(observer);
}
© www.soinside.com 2019 - 2024. All rights reserved.