我至少阅读了20条帖子,但仍然找不到答案。因此,发布此问题。可能是其他找不到的答案,我找不到。
class OuterService {
InnerService innerService;
@Autowired
public void setInnerService(InnerService innerService){
this.innerService = innerService;
}
public void method() {
Class c = innerService.invokeMethod(param1, param2);
c.invokeCMethod(); // Here c comes null while executing jUnits.
}
}
这是我的测试班:
@SpringBootTest
@RunWith(PowerMockRunner.class)
class ClassOuterServiceTest {
OuterService outerService = new OuterService();
@Mock
InnerService innerService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
outerService.setInnerService(innerService);
}
public void methodTest() {
C c = new C();
when(innerService.invokeMethod(param1, param2)).thenReturn(c);
doNothing().when(c).invokeCMethod();
outerService.method();
}
}
但是我在OuterService.java中的对象c内部却为空。
什么是合适的解决方案?
不需要为OuterService
创建对象,请使用@InjectMocks
批注,并且在使用方法存根时仅使用模拟对象。在程序中,您正在创建c
的对象。不用创建对象,只需使用@Mock
注释。
注意:除非要测试静态或最终类,否则不要使用
PowerMockRunner
。
@SpringBootTest
@RunWith(MockitoJUnitRunner.class)
public class ClassOuterServiceTest {
@InjectMocks
public OuterService outerService;
@Mock
public C c;
@Mock
public InnerService innerService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void methodTest() {
when(innerService.invokeMethod(anyString(), anyString())).thenReturn(c);
doNothing().when(c).invokeCMethod();
outerService.method();
}
}