[英]Tests repeats the code with Mockito
我的測試只是重復代碼。 方法
public void start(Context context) {
context.setA(CONST_A);
context.setB(CONST_B);
...
}
我用Mockito編寫了測試
@Test
public void testStart() throws Exception {
Context mockContext = mock(Context.class);
action.start(mockContext);
verify(mockAction).setA(Action.CONST_A);
verify(mockAction).setB(Action.CONST_B);
...
}
或為
public void act() {
state.act();
}
測試
@Test
public void testAct() throws Exception {
State mockState = mock(State.class);
context.setState(mockState);
context.act();
verify(mockState).act();
}
這樣的測試有用嗎? 這些方法需要進行測試,如何進行測試?
我認為,您一般不應該嘗試100%的測試覆蓋率。 高測試覆蓋率是好的,完美覆蓋率是沒有用的,會浪費您的時間。 任何僅設置,獲取工作或將工作委托給另一種方法的方法都不應進行測試,因為這將花費您很多錢,甚至在重構時會花費更多。 最后,它不會為使用您的API的任何人增加更多的反回歸值或任何幫助。
首選具有真實智能,風險或敏感性的測試方法。 您提交的案例比您自己的代碼更能測試Mockito。 這將花費構建時間,並且不會對您有所幫助。
就我個人而言,我根本不認為verify()
有用,因為它直接測試實現而不是方法的結果。 當您更改實現而結果仍然正確時,這將給您帶來錯誤的失敗。
至於這是否有用:沒有邏輯可以測試,所以沒有,它不是特別有用。
根據我在其他答案中留下的評論
public void start(Context context) {
context.setA(CONST_A);
context.setB(CONST_B);
...
}
不應使用Mockito進行測試,而是
@Test
public void testStart() throws Exception {
Context context = new Context();
action.start(context);
assertThat(context.getA(), equalTo(Action.CONST_A));
assertThat(context.getB(), equalTo(Action.CONST_B));
}
它的差別不大,但與start相比,如果start設法在不調用setter或getter的情況下達到此狀態,則它也可以變為true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.