我正在使用“参数化”跑步者来执行一些测试。我正在从XML文件生成测试数据。这很好用。
现在我想将此行为应用于多个测试类,而不必复制测试数据生成代码。所以我创建了一个抽象类,它完成了从“一个”XML文件填充测试数据的工作。如果子类可以告诉我使用哪个XML文件,那么我就可以实现我的目标。
但我一直无法找到办法。
这是我的超级
@RunWith(Parameterized.class)
public abstract class AbstractXMLDrivenTest{
@@Parameters
public static Collection<Object[]> generateData () {
/* Reads an XML File and returns test input data */
}
}
这是一个子类
public class TestSomeThing extends AbstractXMLDrivenTest {
public TestSomeThing(args) {
/* Args are populated by generateData in superclass */
}
}
如果我在AbstractXMLDrivenTest中使用用于TestSomething的XML文件,这可以正常工作。 我希望XML文件由子类(即TestSomething)定义,以便我可以将超类与其他测试用例一起使用。我希望现在很清楚。
答案 0 :(得分:2)
Java中没有静态方法的继承。此外,静态方法对其类是否为抽象没有区别 - 类只有静态方法的作用域函数。
为了使用继承,请使用非静态方法。这样,您就可以从子类非静态方法或非静态字段中提取XML文件名。
答案 1 :(得分:0)
不,子类不能覆盖静态方法。
答案 2 :(得分:0)
无论是否为抽象类,都无法在Java中覆盖静态方法。
答案 3 :(得分:0)
只需一个子类即可。不要将测试子类相乘,只需在不同的测试文件上调用测试方法即可。实际上,你最好不要让你的测试类成为一个子类,而只是将它自己作为一个单独的类。
如果您想使用行业标准测试,请查看JUnit。
修改强>
您没有仔细阅读该文档。您根本不需要子类:
您可以通过generateData
构建各种测试用例作为数组构建。
在您的情况下,您将拥有一组{("test1.xml", objectResult1), ("test2.xml", objectResult2),...}
形式的对。测试类的构造函数是表单的
ParametrizedTest(String fileXML, ObjectResult result)
。
答案 4 :(得分:0)
如果您的xml文件名存储为超类的静态成员,请让您的子类在调用generateTestData之前指定该值。