0
的Mockito
我想測試這個代碼的Mockito:我怎麼能斷言就返回嘲笑的對象與
@Override
public Response killServer() {
new Thread(new Runnable() {
@Override
public void run() {
Slave slave = SlaveRunner.getSlave();
slave.initiateShutdown();
}
}).start();
String host = System.getenv("HOSTNAME");
return Response.ok().entity(new String ("Stopping REST service on " + host)).build();
}
在一個單元測試,我不能運行這個,因爲系統會退出。 initiateShutdown()
方法執行System.exit();
。我嘲笑這個類:
@Test
public void killServer() throws RestInterfaceException {
SlaveRestInterface mockedAgent = Mockito.mock(SlaveRemoteProxy.class);
Response r = Mockito.mock(Response.class);
Mockito.when(mockedAgent.killServer()).thenReturn(r);
Assert.assertEquals(r.readEntity(String.class), "Stopping REST service on " + System.getenv("HOSTNAME"));
r.close();
}
我不能這樣斷言,因爲r將永遠爲空。有沒有什麼方法可以斷言這個答案呢,還是我不得不忽略這個測試的斷言?
你想測試什麼?你可以測試你的模擬,這是沒有意義的。如果你想測試你的方法,你需要運行它。這意味着你需要運行你的線程......如果你想測試這個方法屬性,你需要重構它。 – Tunaki
http://stackoverflow.com/questions/9841623/mockito-how-to-verify-method-was-called-on-an-object-created-within-a-method –
你有兩個嘲笑,然後你打電話給方法在這些模擬之一。而......呃......你到底在做什麼?你在戒指中放兩個嘲諷,讓他們去爭取誰能更好地僞裝它?你認爲你在那裏測試什麼,沒有任何實際的對象來測試......是的,人們是對的,你需要重構那些代碼。 –