Java 如何初始化参数化类测试的设置?
我有两个实现相同接口的具体类。有两个测试是相同的,所以我想做一个参数化类测试。类最初只需要配置一次(使用相同的设置),因此这是我的解决方法:Java 如何初始化参数化类测试的设置?,java,integration-testing,junit4,Java,Integration Testing,Junit4,我有两个实现相同接口的具体类。有两个测试是相同的,所以我想做一个参数化类测试。类最初只需要配置一次(使用相同的设置),因此这是我的解决方法: @RunWith(Parameterized.class) public class MyInterfaceTest { private MyInterface i; private static boolean setupDone[] = new boolean[2]; //this is ugly public MyInte
@RunWith(Parameterized.class)
public class MyInterfaceTest {
private MyInterface i;
private static boolean setupDone[] = new boolean[2]; //this is ugly
public MyInterfaceTest(MyInterface i) {
this.i = i;
if(i instanceof ImplA && !setupDone[0]){
setup();
setupDone[0] = true;
}else if(i instanceof ImplB && !setupDone[1]){
setup();
setupDone[1] = true;
}
//must add code here for more Impl -> ugly
}
@Parameterized.Parameters
public static Collection<Object[]> getParameters()
{
return Arrays.asList(new Object[][] {
{ new ImplA() },
{ new ImplB() }
});
}
//tets...
}
@RunWith(参数化的.class)
公共类MyInterfaceTest{
私有接口i;
私有静态布尔setupDone[]=new boolean[2];//这很难看
公共MyInterface测试(MyInterface i){
这个。i=i;
if(ImplA&!setupDone[0]的i实例){
设置();
setupDone[0]=真;
}else if(i ImplB&!setupDone的实例[1]){
设置();
setupDone[1]=真;
}
//必须在此处添加代码以获得更多简单->丑陋
}
@参数化。参数化
公共静态集合getParameters()
{
返回Arrays.asList(新对象[][]{
{new ImplA()},
{new ImplB()}
});
}
//春节。。。
}
这很难看。什么是更好的解决方案?@RunWith(Parameterized.class)
@RunWith(Parameterized.class)
public class ServiceLocator1Test {
private MyInterface i;
public MyInterfaceTest(MyInterface i) {
this.i = i;
}
@Parameterized.Parameters
public static Collection<Object[]> getParameters()
{
MyInterface a = new ImplA(); setup(a);
MyInterface b = new ImplB(); setup(b);
return Arrays.asList(new Object[][] {
{ a },
{ b }
});
}
//tets...
}
private static void setup(MyInterface myinterface){/*...*/}
公共类ServiceLocator1测试{
私有接口i;
公共MyInterface测试(MyInterface i){
这个。i=i;
}
@参数化。参数化
公共静态集合getParameters()
{
MyInterface a=新ImplA();设置(a);
MyInterface b=new ImplB();设置(b);
返回Arrays.asList(新对象[][]{
{a},
{b}
});
}
//春节。。。
}
私有静态无效设置(MyInterface MyInterface){/*…*/}
对于getParameters方法,是否需要返回
对象
集合?您可以简单地将数组类型更改为
,以避免在构造函数中进行转换。我所做的转换是确定哪个Impl是I
是,但由于它们都继承了MyInterface
的方法,因此您可能不需要这样做。如果需要测试MyInterface
具有的方法,则可以不使用强制转换调用MyInterface
对象数组。只有在实现具有其他唯一方法名称并且您也需要测试这些名称时,才需要强制转换。否。我的目标是设置每个Impl一次。如果我重新设置,那就错了。必须只执行一次。对不起,也许我只是误解了每个实现的设置是如何完成的。