我有這樣的代碼結構。方法methodToTest
在ClassA
呼籲在ClassA
的方法以及以及在ClassB
Java Mockito - 如何測試在同一個類中調用方法的方法以及其他類中的方法?
public class ClassA {
@Autowired
ClassB classB;
public void methodToTest() {
Object c = methodInA();
Object d = classB.methodInB(c);
}
public Object methodInA() {
//do something
}
}
public class ClassB {
public Object methodInB(Object obj) {
//do something
}
}
我試圖嘲弄兩個呼叫即打電話methodInA
和methodInB
下面的方法是單元測試代碼
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class ClassATest {
@InjectMocks
ClassA classA;
@Mock
ClassB classB;
@Spy
ClassA classASpy;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
//Test method in ClassA
@Test
public void testMethodInA() {
Object mockObjA = mock(Object.class);
Object mockObjB = mock(Object.class);
doReturn(mockObjA).when(classASpy).methodInA();
when(classB.methodInB(mockObjA)).thenReturn(mockObjB);
classA.methodToTest();
//assertions
}
}
在運行測試,Object c
爲空,但我希望它是等於mockObjA
。
我也嘗試過使用classASpy.methodToTest()
進行調用。但是,它在methodToTest()
的Object d = classB.methodInB(c)
處給出NullPointerException
。
測試此類情況的正確方法是什麼?
使用Mockito註釋需要Mockito亞軍或適當的規則或initMocks調用,請參閱文檔:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#mock_annotation – 2016-06-10 10:00:36
我已經更新了測試代碼。我在setup方法中使用initMocks。我錯過了在這裏提及它。 – msfk
你可以發佈[mcve]嗎? – 2016-06-10 10:20:37