正如我们所知,PowerMockito可以准备只测试一个最终,静态或私有类,如下所示:
@RunWith(PowerMockRunner.class)
@PrepareForTest(SomeClassNumber1.class)
public class SomeClassUnderTest{
@Before
public void setUp() throws Exception {
}
@Test
public void testSomeMethod() throws Exception {
}
}
但是我要测试的方法使用多个静态类。我想做的事情看起来像是:
@RunWith(PowerMockRunner.class)
@PrepareForTest(SomeClassNumber1.class, SomeClassNumber2.class)
public class SomeClassUnderTest{
但@PrepareForTest只有一个参数。
编辑:例如,该方法将使用单件,工厂或一些不同类的静态方法。
public class SomeClass {
private Session session;
private Object object;
public void someMethod(int userId) {
Session session = Session.getSession(userId);
Object object = Singleton.getInstance();
}
}
注意:使用单一责任原则可以解决问题。例如而不是在将要测试的方法中使用单例,我可以将其提取到另一个方法,如下所示,并模拟它:
public class SomeClass {
private Session session;
private Object object;
public void someMethod(int userId) {
session = getSession(userId);
object = getInstance();
}
private getSession(userId) {
return Session.getSession(userId);
}
private Object getInstance(){
return Singleton.getInstance();
}
}
但这对我来说似乎并不是一个好的解决方案。如果PowerMockito或其他测试工具具有可以同时模拟多个静态类的功能,那就更好了。
答案 0 :(得分:1)
编辑:例如,该方法将使用单个,工厂或一些不同类的静态方法。
您不应该首先使用静态访问类成员和方法,您还应该避免使用 Java singelton模式,还有其他可能性来确保您只有一个类的实例在运行时。
写完背后可以回答你的问题:
@PrepareForTest只有一个参数。
这个单个参数可能是一个数组:
@PrepareForTest({Class1.class,Class2.class})