【发布时间】:2017-08-29 09:20:58
【问题描述】:
我想测试fan.setState方法是否被调用
class OffState implements State {
@Override
public void changeState(Fan fan) {
fan.setState(new OnState());
}
}
【问题讨论】:
标签: java unit-testing mockito tdd
我想测试fan.setState方法是否被调用
class OffState implements State {
@Override
public void changeState(Fan fan) {
fan.setState(new OnState());
}
}
【问题讨论】:
标签: java unit-testing mockito tdd
像这样:
@RunWith(MockitoJUnitRunner.class)
public class OffStateTest {
@Mock
private Fan fan;
@Test
public void testChangeState() {
//Arrange
OffState offState = new OffState();
//Act
offState.changeState(fan);
//Assert
Mockito.verify(fan).setState(Mockito.any(OnState.class));
}
}
【讨论】:
OnState.equals() 方法可以解决这个问题。我开始编写测试用例的 ArgumentCaptor 形式,但觉得这可能只会混淆问题。无论如何,使用Mockito.any() 是让它通过的最简单方法,如果需要,OP 可以继续使用自定义匹配器或 ArgumentCaptor。谢谢!