如何编写使用XML的测试用例?

时间:2016-06-22 08:10:20

标签: java json xml junit

如何让这样的测试用例更具可读性?

{% if fotosList|length > 4 %}

{% endif %}

我是否需要在String中手动设置换行符,

@Test
public void test1() throws Exception {
    assertEquals("{\"Root\":{\"Name\":\"Paul\",\"Age\":\"10\",\"Enabled\":\"true\"}}",
            transformer.transformXmlToJson("<Root><Name>Paul</Name><Age>10</Age><Enabled>true</Enabled></Root>"));
}

但是当我在eclipse中格式化这个类时,整个格式都需要折腾。

在编写这些测试用例时,我们应该遵循一个好的做法,使其更具可读性吗?

同样,有没有办法以更好的格式编写JSON?

3 个答案:

答案 0 :(得分:1)

我个人会做的是从资源文件加载XML或JSON数据。类似的东西:

src
+-- test
    +-- java
    |   +-- mypackage
    |       +-- MyTestClass.java
    \-- resources
        +-- mypackage
            +-- test1_input.xml
            +-- test1_expected_output.json

测试类(使用commons-io,但任何IO库或您自己的代码都可以):

package mypackage;

import java.io.IOException;

import org.apache.commons.io.IOUtils;
import org.junit.Test;

public class MyTestClass {

    @Test
    public void test1() throws IOException {
        final String xmlInput = IOUtils
                .toString(getClass().getResourceAsStream("test1_input.xml"));
        final String expectedJsonOutput = IOUtils
                .toString(getClass().getResourceAsStream("test1_expected_output.json"));
        // Do the test
    }
}

当然,测试代码很容易应用于一堆具有不同输入的测试用例。

你是否觉得这个可读性方面的好主意可能主要是品味问题。

另一个方面是你比较JSON(或XML)字符串的方式:如果JSON的格式不同(字段之间有额外的空格或换行符......),你真的希望断言失败吗?如果没有,您应该考虑使用库来比较JSON(或XML)数据的实际结构,例如:

  • JSONassert(适用于JSON)
  • hamcrest-json(对于JSON,如果你使用Hamcrest匹配器;它基于JSONassert)
  • XMLUnit(对于XML;请参阅XMLAssert类)
  • 可能还有其他人......

答案 1 :(得分:0)

如果只是关于格式化,你可以看到here如何禁用类/方法中某些部分的格式化程序(我偶尔会在我的代码中执行此操作)。

但除此之外,你可以考虑使用 assertThat 并为这种比较编写自定义匹配器。

更正:我强烈建议在任何情况下都使用断言;独立于问题是否有意义创建自定义匹配器。

答案 2 :(得分:0)

我认为最好的方法是:

  1. 如果没有一个代表JSON和XML的Java类,那么创建一个Java类(比如A.java)。覆盖此类的equals()hashCode()
  2. 将实际的JSON字符串转换为Java对象(A类),例如obj1。
  3. 将实际的XML String转换为Java对象(A类),例如obj2。
  4. 断言obj1和obj2是否相等。