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

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

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

4

2 回答 2

2

如果我误解了某些东西,请原谅我,但是如果您使用的是 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...
    }
}

在此处查看有关如何验证静态行为的更多信息。

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

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

    ... etc...
}

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

于 2013-03-18T14:40:38.873 回答
1

如果你想做的是在你的一个测试中创建一个 Spring bean 的实例,你不需要为此使用 powermockito。你可以做这样的事情

@ContextConfiguration(locations = "/beans.xml")
public class YourTestJUnit4ContextTest extends  AbstractJUnit4SpringContextTests {

private ReManager reManager;

@Before
public void init() {
    reManager= (ReManager) applicationContext.getBean("reManager");
}

@Test
public void testReManager() {
    // Write here the code for what you wnat to test
}

}

beans.xml 是您定义应用程序上下文的文件。我能想到的最好的链接就是这个

弹簧测试支持

于 2013-03-18T14:28:16.250 回答