我必须测试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.... } }
使用这种测试运行方法的优点是您有一个简单的输入列表供测试.