使用测试类字段在方法之间共享



我有一个Java类,如下

public class MyClass {
private final ShowFactory showFactory;
private SomeShow someShow;
public MyClass(ShowFactory showFactory) {
this.showFactory = showFactory;
startShow();
}
public void startShow() {
someShow = showFactory.createShow();
someShow.start();
}
public void showSomething() {
MagicBox magicBox = new MagicBox();
someShow.showSomething(magicBox);
}
public void stopShow() {
someShow.stop();
}
}

并尝试测试CCD_ 1方法。完整的测试文件如下

public class MyClassTest {
private ShowFactory showFactory;
private SomeShow someShow;
@Before
public void setUp() {
showFactory = mock(ShowFactory.class);
someShow = mock(SomeShow.class);
when(showFactory.createShow()).thenReturn(someShow);
}
@Test
public void shouldStartShow() {
new MyClass(showFactory);
verify(someShow).start();
}
@Test
public void shouldShowSomething() throws Exception {
MagicBox magicBox = mock(MagicBox.class);
PowerMockito.whenNew(MagicBox.class).withAnyArguments().thenReturn(magicBox);
doNothing().when(someShow).showSomething(magicBox);
InOrder inOrder = inOrder(someShow);
MyClass myClass = new MyClass(showFactory);
myClass.showSomething();
inOrder.verify(someShow).start();
inOrder.verify(someShow).showSomething(magicBox);
}
@Test
public void shouldStopShow() {
MyClass myClass = new MyClass(showFactory);
myClass.stopShow();
verify(someShow).start();
verify(someShow).stop();
}
}

但是测试shouldShowSomething失败,出现错误Wanted but not invoked。我这里有什么遗漏吗?有什么建议吗?

这是一个简单的修复。通读后https://github.com/powermock/powermock/wiki/MockConstructor#quick-summary(感谢@roby(发现我缺少该类的@PrepareForTest注释。

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class MyClassTest {
...
}

最新更新