簡體   English   中英

Mockito when() 方法不工作並得到 null 指針異常

[英]Mockito when() method not working and getting null pointer exception

我正在使用 Mockito 和 JUnit 編寫單元測試用例。但是在運行測試時出現NullPointerException 在調試時,我了解到 Mockito on method: when().thenReturn()沒有返回依賴方法的值,調用程序正在調用這些方法以獲得結果。

下面是我用來了解代碼結構的虛擬代碼:

class B {
  public C getValue() {
    return C;
  }
}

class A {
  public D getAns(String q1, String q2) {
    return B.getValue().map(mapper::toD); //null pointer exception start here 
  } 
}

@RunWith(MockitoJunitrunner.test)
class TestA {
  
  @InjectMock
  A a;

  @Mock
  B b;
  C c;

  init() {
    when(b.getValue()).thenReturn(c);
  }

  @Test
  public void getA() {
    D ans=A.getAns(q1,q2);  //getting null pointer exception here 
    AssertNotNull(ans);
  }
}

不調用when(...).thenReturn(...)原因可能有多種:

  1. 構造中使用的數據類型不完全匹配,例如,如果您有一個字符串並且您傳遞 null,則其方法調用不相同
  2. 確保使用相同的方法初始化對象。 spring 注入的資源與使用 new 運算符創建的資源不同

你有類調用彼此的方法,所以最好使用Mockito.RETURNS_DEEP_STUBS

在您的情況下:

A呼叫BB呼叫C

只需更換:

 @InjectMock
  A a;

  @Mock
  B b;
  C c;

和 :

A a = Mockito.mock(A.class, Mockito.RETURNS_DEEP_STUBS);
B b = Mockito.mock(B.class, Mockito.RETURNS_DEEP_STUBS);
C c = Mockito.mock(C.class, Mockito.RETURNS_DEEP_STUBS);

使用@InjectMock 和@Mock 來解決這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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