,为了避免重复测试类进行简单的集成测试了很多,我想创建一个参数化通用测试类,如下面的例子:如何在Eclipse中运行通用参数化JUnit测试?
@RunWith(Parameterized.class)
public class MovementTest<V extends Vehicle, T extends Track<V>> {
private final V testVehicle;
private final T testTrack;
public MovementTest(V vehicle, T track){
testVehicle = vehicle;
testTrack = track;
}
@Test
public void testMovement(){
testVehicle.moveAlong(testTrack);
}
@Parameters
public static Iterable<Object[]> provideTestExamples(){
Object[][] params = {
{ new Car(), new Highway() },
{ new Train(), new RailRoadTrack() }
};
return Arrays.asList(params);
}
}
public interface Vehicle {
abstract void moveAlong(Track t);
}
public interface Track<E extends Vehicle> { }
public class Train implements Vehicle {
@Override
public void moveAlong(Track t) {}
}
public class RailRoadTrack implements Track<Train> {}
public class Car implements Vehicle {
@Override
public void moveAlong(Track t) { }
}
public class Highway implements Track<Car> {}
不幸的是,这个测试类是不可运行。有没有一种简洁的方式来实现类似的东西?
任何堆栈跟踪,记录,不管?你有对象[] []参数,但正在创建新的对象[] – Gaskoin
@Gaskoin修正它。另外,Eclipse不提供运行这个测试类的选项,所以没有堆栈跟踪。 –
Eclipse JUnit runner将运行在类型擦除的字节码上,因此MovementTest具有泛型类型参数并不重要。你在使用相对较新版本的eclipse吗?项目路径中是JUnit 4吗?在eclipse Luna中,参数化测试 - 即使是泛型类型参数 - 我都没有问题。 –