Junit测试一个带字符串的类

时间:2014-12-29 14:33:34

标签: junit

//DOC Datatype Constants
public enum DocDatatype {

    PROFILE("Profile"),

    SUPPORT_DETAIL("SupportDetail"),

    MISC_PAGE("MiscPage"),

String name;

    DocDatatype(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    // the identifierMethod
    public String toString() {
        return name;
    }

    // the valueOfMethod
    public static DocDatatype fromString(String value) {
        for (DocDatatype type : DocDatatype.values()) {
            if (type.getName().equals(value))
                return type;
        }

        throw new java.lang.IllegalArgumentException(value
                + " is Not valid dmDataType");
    }
}

我已经用这种方式编写了junit测试用例。无论是正确的写作方式还是错误的方式......?

public class DocDatatypeTest {

    private static final Log logger = LogFactory
            .getLog(TreeConstantTest.class);

    @Test
    public void testDocDatatypeFromName()
    {
        DocDatatype d= DocDatatype.fromString("Profile");

        assertTrue((d.toString().compareToIgnoreCase("PROFILE") == 0));

    }

    @Test
    public void testDocDatatypeFromName1()
    {
        DocDatatype d = DocDatatype.fromString("SupportDetail");
        assertTrue((d.toString().compareToIgnoreCase("SUPPORT_DETAIL") == 0 ));
    }

    }
}

1 个答案:

答案 0 :(得分:0)

这里有一些事情:

  • 从测试中删除记录器。测试应通过或失败,无需记录
  • 不要为此使用assertTrue。如果测试失败,它将不会向您提供有关/为什么/它失败的信息。

我会将此更改为

@Test
public void testDocDatatypeFromName()
{
    DocDatatype actualDocType = DocDatatype.fromString("Profile");
    assertSame(DocDataType.PROFILE, actualDocType);
}

如果你真的想断言toString的值,那就这样做

@Test
public void testDocDatatypeFromName()
{
    DocDatatype d= DocDatatype.fromString("Profile");
    assertEquals("Profile", d.toString());
}
  • 您缺少查找与任何内容不匹配的测试
  • 我甚至不会写这些测试,因为我看到他们没有添加任何价值。 使用枚举的代码应该有测试,而不是这些。
  • 您的测试名称非常糟糕。没有必要用test开始测试,并且在第二次测试结束时添加“1”的事实应该告诉你一些事情。测试名称应侧重于操作行为。如果您想了解更多相关信息,请参阅12月号JAX Magazine,其中包含有关我即将出版的有关测试的书籍的命名摘要。