Mockito将InjectMocks转换为静态对象

时间:2015-11-17 11:28:12

标签: java mockito

我有类似的东西

@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中没有构造函数创建)?     或许还有另一种解决方法吗?

问题不是模拟静态方法,而是将模拟注入静态对象 非常感谢任何建议,谢谢。

1 个答案:

答案 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);
    }
    ....
}

当您使用神奇注射时,您必须使用一些反射,或更改为构造函数注入。无论如何,生活会更好。