private ServiceImpl() {
// TODO Auto-generated constructor stub
reMgr = (ReManager) SpringContext.getBean("reManager");
我想模拟这个方法,这是一个初始化springContext的私有构造函数。我正在使用beans.xml通过我的powermockito测试用例设置beanfactory,其中我已经指定了bean及其类名。仍然这种方法无法获得reManager的实例。
答案 0 :(得分: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...
}
}
有关如何验证静态行为的详情,请参阅here。
或者......我会改变设计,以便将依赖关系传递给被测试的类,例如:
@Test
public void foo() {
final ReManager manager = Mockito.mock(ReManager.class);
final ServiceImpl service = new ServiceImpl(manager);
... etc...
}
然后不需要PowerMock,您的测试变得更容易,并且类之间的耦合更少。
答案 1 :(得分: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是您定义应用程序上下文的文件。我能想到的最好的链接就是这个