我有这样的代码结构。方法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