2015-04-24 39 views
1

我遇到了一些奇怪的事情。的功能 示例:Android单元测试枚举类型

public class F { 
    public enum Pawn {Black, White} 

    public Pawn x; 
    public F(){ 
     this.x = Pawn.Black; 
    } 
    public Pawn test(){ 
     return this.x; 
    } 
} 

此单元测试:

import junit.framework.Assert; 
import junit.framework.TestCase; 

import <package ... >.F; 

public class FTest extends TestCase { 
    public void testValue(){ 
     F mF = new F(); 
     Assert.assertSame(Pawn.Black, mF.test()); 
    } 
} 

和JUnit输出:

junit.framework.AssertionFailedError: expected same:<Black> was not:<Black> 

Expected :Black 
Actual :Black 

黑色不黑和为黑色。这是黑魔法。 :/ 我能做些什么来完成这项工作(即通过测试)?

回答

1

你需要的assertEquals,不AssertSame

的assertEquals(java.lang.Object中预计,实际java.lang.Object继承) 断言两个对象是相等的。

assertSame(java.lang.Object中预计,实际java.lang.Object继承) 断言两个对象指向同一个对象

你的代码是比较反对的枚举对象Pawn.Black对象Fx的。它应该是

public void testValue(){ 
    F mF = new F(); 
    Assert.assertEquals(F.Pawn.Black, mF.test()); 
} 
+1

嗯,我只是测试它,它对Junit 4工作。我不得不作出参考F.Pawn.Black,而不是Pawn.Black,否则不编译。使用枚举AssertSame可能也会起作用,它们有点像String文字,但为了清晰起见,assertEquals更好。 – Sanj

+0

谢谢。另外:assertSame正在工作,但我会记得使用assertEquals。 – Tymek