枚举toString上的ClassCastException

时间:2014-01-24 21:39:16

标签: java junit

任何人都可以解释为什么下面的JUnit测试会因ClassCastException而失败:消息无法在下面的Assert语句中强制转换为java.lang.String吗?

    public enum Message{
        NULL_REQUEST("Null Request"),
        INVALID_NUMBER_OF_REQUESTS("Invalid number of requests");

        Message(String msg){
            this.msg = msg;
        }

        @Override
        public String toString(){
            return msg;
        }
        private final String msg;
    }

然后测试类有:

@Test
public void test(){
    String x = Message.INVALID_NUMBER_OF_REQUESTS.toString();
    Assert.assertEquals(x, "actual value" );
}

1 个答案:

答案 0 :(得分:0)

cxfquest,

您的代码有(有)错误,请更正。

以下代码适用于我:

public class MyTestUnit {

    public enum Message{
        NULL_REQUEST("Null Request"),
        INVALID_NUMBER_OF_REQUESTS("Invalid number of requests");

        Message(String msg){
            this.msg = msg;
        }

        private final String msg;

        public String getMsg() {
            return msg;
        }

        @Override
        public String toString() {
            return msg;
        }


    }

    @Test
    public void test(){
        String x = Message.INVALID_NUMBER_OF_REQUESTS.toString();
        Assert.assertEquals(x, "actual value" );
    }

}

我认为您没有编译,而且您正在运行旧版本(可能)。

结果是:

  

org.junit.ComparisonFailure:expected:< [无效的请求数]>   但是:< [实际值]>

正如所料。