[英]Mockito NotaMockException
我正面臨 Mockito junit 測試的問題。 我是新手,對我面臨的問題有點困惑。 對此的任何幫助將不勝感激。
class Activity{
public void firstMethod(){
String str = secondMethod();
}
public String secondMethod(){
String str = null;
/* some Code */
return str;
}
}
獲取異常:
*org.mockito.exceptions.misusing.NotAMockException:
Argument passed to when() is not a mock!*
在下面的代碼中
class ActivityTest(){
Activity act;
@Before
public void setup(){
act = new Activity();
}
@Test
public void testFirstMethod(){
Mockito.doReturn(Mockito.anyString()).when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
我知道活動不是模擬,但我不確定有沒有辦法解決這個問題,因為secondMethod()
是同一個類中的方法。 我需要為secondMethod()
編寫規則,因為我已經完成了它的單元測試。 secondMethod()
的定義包含外部依賴。 我應該嘲笑secondMethod()
存在的外部依賴項並為它們編寫規則而不是為secondMethod()
編寫規則嗎?
我找到了這篇文章: Mockito Spy'ing on the object being unit testing 然而,將 secondMethod() 分成不同的類沒有意義。 我的方法與這個類有關。 為測試創建一個不同的類對我來說似乎不合適。 即使使用 spy() 模擬實際類也不是最正確的方法,正如帖子中已經解釋的那樣。
我認為我不應該創建 Activity 類的模擬,因為這是我正在測試的類。 我真的很感激對此的幫助和見解。
正如您所指出的, act
不是模擬,因此您無法在其上記錄行為。 你可以使用Mockito.spy
,好了,間諜(或部分模擬)的act
對象,以便只錄制的行為secondMethod
和執行實際代碼firstMethod
。
但是請注意,無論您如何mock
或spy
對象,都不能在doReturn
調用中使用匹配器。 返回值必須是具體的對象。
class ActivityTest() {
Activity act;
@Before
public void setup(){
act = Mockito.spy(new Activity()); // Here!
}
@Test
public void testFirstMethod(){
Mockito.doReturn("someString").when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
稍微優雅的語法允許您使用注釋而不是顯式調用Mockito.spy
,但這確實是一個品味問題:
@RunWith(MockitoJUnitRunner.class)
class ActivityTest() {
@Spy
Activity act = new Activity();
@Test
public void testFirstMethod(){
Mockito.doReturn("someString").when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
這里有一些提示:
希望能幫助到你。
在這個例子中沒有理由嘲笑任何東西。 由於沒有依賴項並且兩個方法都是公共的,因此您可以直接測試它們。
public class ActivityTest() {
private Activity act = new Activity();
@Test
public void testSecondMethod(){
assertEquals("expected-value", act.secondMethod());
}
@Test
public void testFirstMethod() {
act.firstMethod();
// success if no exception occurs
}
}
由於 firstMethod 對 Act 實例和任何依賴項(因為沒有)都沒有任何可檢測的影響,因此您可以簡單地調用該方法,如果沒有拋出異常就可以滿足。 人們也可以推斷根本不應該測試這種方法。
我假設給出的例子是一個類的簡化,其中調用 firstMethod 實際上確實有副作用,誰知道...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.