簡體   English   中英

測試使用Mockito重復代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM