我正在考虑将预期数据发送到构造函数中,但后来意识到这是一个愚蠢的想法。
我仍然宁愿尽量减少打字。
我有一个广泛的xml配置文件。其中的一些元素可能会出现多次(ei,多个channel
标记)。对于那些元素,我的计划是制作一个“测试人员”。可以调用以验证每个单独的频道&各自的价值观。我不知道如何使用JUnit做到这一点。
计划是有2个配置文件,配置相反。
参数化就是答案。感谢。
这是一个例子,如果有人想要进一步的例子,我就会掀起一个例子:
@RunWith(Parameterized.class)
public class GlobalTester{
@Parameter(0)
public Configuration config;
@Parameter(1)
public boolean debug;
@Parameters
public static Collection<Object[]> params() throws Exception{
List<Object[]> inputs = new LinkedList<Object[]>();
Object[] o = new Object[2];
o[0] = ConfigurationSuite.load(1);
o[1] = true;
inputs.add(o);
o = new Object[2];
o[0] = ConfigurationSuite.load(2);
o[1] = false;
inputs.add(o);
return inputs;
}
@Test
public void debug(){
assertEquals(debug, config.getGeneral().isDebug());
}
}
答案 0 :(得分:1)
为测试用例使用多个参数的一种方法是使用JUnit提供的Parameterized API。
以下是在同一测试用例中使用它时读取不同XML文件的一个示例。
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class ConfigTest {
private String xmlFile;
public ConfigTest(String xmlFile) {
this.xmlFile= xmlFile;
}
@Test
public void testXml() throws Exception {
System.out.println(xmlFile);
}
@Parameters
public static Collection<String> data() throws Exception{
String file1 = new String(Files.readAllBytes(Paths.get(ConfigTest.class.getResource("config1.xml").toURI())));
String file2 = new String(Files.readAllBytes(Paths.get(ConfigTest.class.getResource("config2.xml").toURI())));
Collection<String> data = new ArrayList<String>();
data.add(file1);
data.add(file2);
return data;
}
}
答案 1 :(得分:0)
这是使用Parameterized的一个很好的解决方案,但是这会带来一个问题,如果我们要让其他测试用例在没有Parameterized的情况下作为单独的测试运行,那么我们就不能这样做。
要解决该问题,我们可以使用@Suite.SuiteClasses或@Enclosed
否则,我们可以使用简单的选项@Theories和@DataPoint,这将是上述问题的简单解决方案。