2017-08-29 59 views
2

我想测试fan.setState方法被调用或不如何使用的Mockito

class OffState implements State { 

    @Override 
    public void changeState(Fan fan) { 
     fan.setState(new OnState()); 
    } 

} 

回答

2

像这样给出的测试代码:

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

@Nkosi:我是假设了'OnState.equals() '方法会覆盖这个。我开始编写测试用例的ArgumentCaptor表单,但觉得这样做可能只会混淆事件。无论如何,使用'Mockito.any()'是使它通过的最简单方法,如果需要,OP可以移动到自定义匹配器或ArgumentCaptor。谢谢! – glytching

+0

但是,如果我使用任何验证(风扇).setState(Mockito.any(OffState.class));或者验证(fan).setState(Mockito.any(OnState.class));仍然有效 – Srinivas