我必须测试 100 多种不同的情况,对于每一种情况,我都需要读取和解析外部 xml。 我使用:
String xml = IOUtils.toString(
this.getClass().getResourceAsStream(path),encoding);
例如我的测试 xml:
<container xmlns:dmc="http://example.com/common">
<object id="1369" checkedParamter="in" class="Class1">
...
</object>
</container>
但我必须使用有效 ID、缺少 ID 和现有 ID 进行测试。然后我需要 checkedParamter 有 3-4 个值,并将所有组合与 id 属性结合起来。对于现在的每个测试,我都会创建新的 xml,唯一的区别是这两个属性 id 和 checkedParamter。 我想知道是否有简单的方法来读取 xml 并使用相同的结构,但从我的测试中传递这些值。
<container xmlns:dmc=" http://example.com/common">
<object id= ${valueId} checkedParamter=${valueChechedParamter} class="Class1">
...
</object>
</container>
然后我将使用一个 xml 并将期望值放在测试的开头。我没有技术或方法吗?
最佳答案
最好的方法是使用 ${valueId}
创建一个单独的文件,就像您已经拥有的那样。
我们将使用 JUnit 的以下功能来实现我们的目标:
- Parameterized tests - 用于我们传入数据的简单列表
我们将以下文件存储到项目的 resources
部分:
<container xmlns:dmc=" http://example.com/common">
<object id= ${valueId} checkedParamter=${valueChechedParamter} class="Class1">
...
</object>
</container>
然后我们开始测试:
@RunWith(Parameterized.class)
public class XmlInputTest {
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 1369, "in" },
{ 1369, "out" },
{ 753, "in" },
// etc....
});
}
@Parameter(value = 0)
public int id;
@Parameter(value = 1)
public String checkedParamter;
@Test
public void mainTest() {
String xml = IOUtils.toString(
this.getClass().getResourceAsStream("template.xml"),encoding);
xml = xml.replace("${valueId}",String.valueOf(id)).replace("${valueChechedParamter}",checkedParamter);
// remaing test....
}
}
使用这种测试运行方法的优点是您有一个简单的输入列表来测试。
关于java - 使资源 xml 可配置,同时在 java 中进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35127124/