使用对象上的断言进行Java junit测试

使用对象上的断言进行Java junit测试,java,Java,当我执行第一个测试用例时,它以绿色显示失败用例 但是当我执行第二个测试用例时,它将错误显示为java.lang.AssertionError 我正在为这门课写测试用例 公共枚举DocDatatype{ public class DatatypeTest { private static final Log logger = LogFactory .getLog(TreeConstantTest.class); @Test public void

当我执行第一个测试用例时,它以绿色显示失败用例

但是当我执行第二个测试用例时,它将错误显示为
java.lang.AssertionError

我正在为这门课写测试用例

公共枚举DocDatatype{

public class DatatypeTest {

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

    @Test
    public void testDatatypeFromName()
    {
        Datatype d= Datatype.fromString("Profile");

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

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

你需要的是看到实际价值的能力

您可以使用调试器,但这不是一个好的解决方案:如果您的测试由自动化系统运行,该怎么办

您需要将断言更改为能够提供更多信息的内容

请看这个JUnit断言equalsIgnoreCase的方法

另一种方法是提供故障消息:

PROFILE("Profile"),

SUPPORT_DETAIL("SupportDetail"),

这里的主要问题是缺少一些上下文,而这个数据类型类的用例有点奇怪(数据类型应该是枚举)

您实际上不需要这个
fromString
-方法。请看这个类:

public enum DataType {

PROFILE("Profile"),
SUPPORT_DETAIL("SupportDetail");

private String value;
private DataType(String value) {
    this.value = value;
}

@Override
public String toString() {
    return this.value;
}
}
然后你可以这样做你的测试,注意第三种测试方法:

public class DataTypeUtil {

public static DataType fromString(String value) {
    return DataType.valueOf(value.toUpperCase()); // should check for null or blank
   }
}
}

请注意-方法的
值。它的作用与
fromString
-方法的作用完全相同,您可以从
enum
获得它

要点是您只需要
enum
,而
DataType
是您的最佳选择

希望这能以某种方式澄清您的问题:)

编辑:

如果我猜您的用例,您有一个具有特定格式或类型的文档。为什么不创建一个
文档
类,将
数据类型
作为对象上的枚举字段

问候,,
Thomas

字符串
“SupportDetail”
与字符串
“SUPPORT\u DETAIL”
不匹配,即使忽略大小写。第二个有一个下划线。public enum DocDatatype{PROFILE(“PROFILE”),SUPPORT_DETAIL(“SupportDetail”),我正在为这个类编写测试用例如果你说基于你的枚举这应该是真的,那么在你的问题中包括枚举代码。
AssertionError
,作为一个
可丢弃的
,可以给你一个错误根本原因的详细信息。你应该检查一下。你发布的
enum
代码的位不包括单元测试正在检查的
fromString
toString
的定义。DOC数据类型常量public enum DocDatatype{PROFILE(“PROFILE”)、SUPPORT_DETAIL(“SupportDetail”)、String name;DocDatatype(String name){this.name=name;}public String getName(){return name;}public String toString(){return name;}public static DocDatatype fromString(String value){for(DocDatatype type:DocDatatype.values(){if(type.getName().equals(value))返回类型;}抛出新的java.lang.IllegalArgumentException(value+“不是有效的dmDataType”);}
public class DataTypeUtil {

public static DataType fromString(String value) {
    return DataType.valueOf(value.toUpperCase()); // should check for null or blank
   }
}
public class DataTypeTest {

@Test
public void testDatatypeFromName() {
    DataType d = DataTypeUtil.fromString("Profile");
    assertTrue((d.toString().compareToIgnoreCase(DataType.PROFILE.toString()) == 0));
}

@Test(expected = IllegalArgumentException.class)
public void testDatatypeFromInvalidName()   {
    DataType d = DataTypeUtil.fromString("SupportDetail");
    assertFalse((d.toString().compareToIgnoreCase(DataType.SUPPORT_DETAIL.toString()) == 0));
}    

@Test
public void testDatatypeFromCorrectName()   {
    DataType d = DataTypeUtil.fromString("Support_Detail");
    assertTrue((d.toString().compareToIgnoreCase(DataType.SUPPORT_DETAIL.toString()) == 0));
}

@Test
public void testGetValueFromEnum() throws Exception {
    DataType dataType = DataType.valueOf("Profile".toUpperCase());
    assertTrue(dataType == DataType.PROFILE);
}