2017-02-27 73 views
-2

我正在使用JUNIT在名为(TriangleClassifier.java)的三角形项目上生成一个测试套件,我试着读取下面的方法来测试a,b,c边和基于期望的输出在这些值上,然后将其应用于JUNIT,但不接受我的测试代码并产生以下错误。有什么建议么?感谢Java JUNIT ERROR

JUNIT错误

expected: java.lang.String<ISOSCELES> but was: TriangleClassifier$TriangleType<ISOSCELES> 
junit.framework.AssertionFailedError 
    at TestSuite.test1(TestSuite.java:9) 

方法试图测试

public static TriangleType classify (int a, int b, int c) { 
     if (isInRange(a) & isInRange(b) & isInRange(c)) { 
      if (isTriangle(a, b, c)) { 
       if (a == b & b == c) { 
        return TriangleType.EQUILITERAL; 
       } else if (a !=b & a != c & b != c) { 
        return TriangleType.SCALENE; 
       } else { 
        return TriangleType.ISOSCELES; 
       } 

      } else { 
       return TriangleType.NOT_A_TRIANGLE; 
      } 
     } else { 
      return TriangleType.OUT_OF_RANGE; 
     } 
    } 

TestSuite.java

import static org.junit.Assert.*; 
import org.junit.Test; 


public class TestSuite { 

    @Test 
    public void test1() { 
     assertEquals("ISOSCELES", TriangleClassifier.classify(100, 100, 1)); 
    } 

} 

UPDATE

已尝试过更改 assertEquals(“ISOSCELES”,TriangleClassifier.classify(100,100,1)); 至 assertEquals(TriangleType.ISOCELES,TriangleClassifier.classify(100,100,1));

虽然我现在JUNIT产生一个新的错误 - 不可编译的源代码 - 错误的树类型: 了java.lang.RuntimeException 在TestSuite.test1(TestSuite.java:9)

TriangleType在下面的行中出现错误,找不到符号 - assertEquals(TriangleType.ISOCELES,TriangleClassifier.classify(100,100,1));

ERROR Screenshot

public enum TriangleType

+1

你仔细阅读错误消息?你不了解什么部分? –

+1

那么我已经尝试了一些变化。通过应用这个assertEquals(TriangleType.ISOCELES,TriangleClassifier.classify(100,100,1)); – AP010AP

+0

COMMENT CONT - 我JUNIT会产生一个新的错误 - 不可编译的源代码 - 错误的树类型: 了java.lang.RuntimeException \t在TestSuite.test1(TestSuite.java:9) – AP010AP

回答

1

你的推断比较一个StringTriangleType,所以自然而然,这些都将是不相等的。你想写

assertEquals(TriangleType.ISOSCELES, TriangleClassifier.classify(100,100,1)); 

其中TriangleType比作TriangleType

更新

由于看来您已经定义TriangleType为内部类型的TriangleClassifier,你会要么需要为它添加一个import语句类,称其作为

assertEquals(TriangleClassifier.TriangleType.ISOSCELES, TriangleClassifier.classify(100,100,1)); 
+0

感谢您的回复。我试过这个,现在我的JUNI产生一个新的错误 - 不可编译的源代码 - 错误的树型: java.lang.RuntimeException \t at TestSuite.test1(TestSuite.java:9) – AP010AP

0

没有去过多地深入你的算法,该错误很明显受到你的classify方法不同的返回类型高亮针对你的单元测试。 classify返回一个TriangleType枚举,但您的JUnit测试期望返回类型为String的对象。由于这两种类型不相同,因此预期值和实际值不可能相等。因此测试失败。

要么将​​您的测试更改为期望TriangleType或您的classify方法返回String

2

通过编写

assertEquals("ISOSCELES", TriangleClassifier.classify(100, 100, 1)); 

你告诉JUnit中,您所期望的函数返回字符串“等腰”。你的函数实际返回的是不变的TriangleType.ISOSCELES。
你的说法更改为这里

assertEquals(TriangleType.ISOSCELES, TriangleClassifier.classify(100, 100, 1)); 
0

两件事情:

  1. 你真的没有太多的线索,你在做什么的。当你处于如此简单的编译器错误消息阻止你取得进展的水平时,你可能必须退后一步,重新学习java基础知识,然后再用单元测试等方法让自己陷入沉重负担(尽管单元测试是一件好事,并且应该尽早开始使用它们)。
  2. 然后我建议你停止使用assertEquals。

JUnit有另一个断言,称为assertThat。您可以使用这样的:

assertThat(TriangleClassifier.classify(100,100,1), is(TriangleType.ISOSCELES)); 

...这里编译器会已经给你一个提示,

assertThat(TriangleClassifier.classify(100,100,1), is("some string")); 

是无效的。

进一步阅读assertThat/here