2017-08-29 24 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