private ServiceImpl() {
    // TODO Auto-generated constructor stub

    reMgr = (ReManager) SpringContext.getBean("reManager");


我想模拟此方法,这是一个初始化springContext的私有构造函数。我正在使用bean.xml通过powermockito测试用例设置beanfactory,其中已经指定了bean及其类名。仍然此方法无法获取reManager的实例。

最佳答案

如果我误解了一些内容,请原谅我,但是如果您使用的是PowerMockito,则无法按照以下方式进行操作:

@RunWith(PowerMockRunner.class)
@PrepareForTest(SpringContext.class)
public FooTest {
    @Test
    public void foo() {
        final ReManager manager = Mockito.mock(ReManager.class);

        PowerMockito.mockStatic(SpringContext.class);
        Mockito.when(SpringContext.getBean("reManager")).thenReturn(manager);

        ... etc...
    }
}


查看有关如何验证静态行为的更多信息here

或者...我将更改设计,以便将您的依赖项传递给测试中的类,例如:

@Test
public void foo() {
    final ReManager manager = Mockito.mock(ReManager.class);
    final ServiceImpl service = new ServiceImpl(manager);

    ... etc...
}


这样就不需要PowerMock,您的测试变得更加容易,并且类之间的耦合也更少了。

08-06 11:17