我有类似的东西
@Component
public class TestController {
@Autowired
private TestService testService;
public String getSomething(String parameter1) {
return testService.fetchSomething(parameter1);
}
}
我用测试覆盖它并遇到以下问题:
@RunWith(MockitoJUnitRunner.class)
public class TestControllerTest {
private static TestService testService = mock(TestService.class);
@InjectMocks
private static TestController testController = new TestController();
....
}
这些字段是静态的,因为我需要@ClassRule。
问题在于,在这种情况下,注入不起作用,testService在testController中为null。
是否可以在静态对象中提供注入(在Controller中没有构造函数创建)? 或许还有另一种解决方法吗?
问题不是模拟静态方法,而是将模拟注入静态对象 非常感谢任何建议,谢谢。
答案 0 :(得分:1)
我认为您必须使用static
块。
@RunWith(MockitoJUnitRunner.class)
public class TestControllerTest {
private static TestService testService = mock(TestService.class);
private static TestController testController ;
static {
testController = new TestController(testService);
}
....
}
当您使用神奇注射时,您必须使用一些反射,或更改为构造函数注入。无论如何,生活会更好。