我有一個看起來像這樣的測驗類:
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
public class SomeTest {
@Mock
Object someObj;
@Before
public void before() {
MockitoAnnotations.openMocks(this);
}
@Test
public void testNullPointer() {
Mockito.when(someObj.toString()).thenReturn("1");
}
}
當我mvn clean test在這個專案的根目錄下運行時,它說測驗用例觸發了NullPointerException,堆疊樹顯示someObj為空。
我正在使用org.mockito::mockito-core::4.0.0和junit::junit::4.13.0。
似乎沒有執行 before() 方法。任何想法為什么?提前確認。
uj5u.com熱心網友回復:
你在你的班級上缺少注釋:
@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest {
...
}
uj5u.com熱心網友回復:
運行此測驗時,您將在堆疊跟蹤上方看到此錯誤:
testNullPointer(org.example.SomeTest) Time elapsed: 0.368 sec <<< ERROR!
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.
2. inside when() you don't call method on mock but on some other object.
這里有趣的部分是第一個專案符號 - 您不能存根該hashCode方法。如果你用一些可以存根的方法替換它,測驗就會通過。例如:
Mockito.when(someObj.toString()).thenReturn("yay!");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326482.html
