我必须测试100多个不同的情况,每一个我都需要外部xml来读取和解析. 我用: String xml = IOUtils.toString( this.getClass().getResourceAsStream(path),encoding); 例如我的测试xml: container xmlns:dmc="http://exa
          我用:
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的ivalid 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 – 用于输入数据的简单列表
我们将以下文件存储到项目的资源部分:
<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....
}
} 
 使用这种测试运行方法的优点是您有一个简单的输入列表供测试.
