我正在使用JUNIT在名为(TriangleClassifier.java)的三角形项目上生成测试套件,我正在尝试阅读以下方法,即根据这些值测试a,b,c侧和预期输出,然后应用这对JUNIT虽然不接受我的测试代码并产生以下错误 . 有什么建议?谢谢
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现在产生了一个新的错误 - 无法编译的源代码 - 错误的树类型:TestSuite.test1中的java.lang.RuntimeException(TestSuite.java:9)
AND
TriangleType出现错误的下面一行无法找到符号 - assertEquals(TriangleType.ISOCELES,TriangleClassifier.classify(100,100,1));
4 回答
在不深入算法的情况下,错误最明显的是
classify
方法的返回类型与单元测试形成对比 .classify
返回TriangleType
枚举,但您的JUnit测试期望返回类型为String
的对象 . 由于这两种类型不相等,因此预期值和实际值不能相等 . 因此测试失败了 .要么将测试更改为期望
TriangleType
,要么将classify
方法更改为String
.通过写作
你告诉JUNIT,你希望函数返回String "ISOSCELES" . 你的函数实际返回的是常量TriangleType.ISOSCELES .
将你的断言改为
你的断言是将
String
与TriangleType
进行比较,所以很自然地,这些不相等 . 你想写它将
TriangleType
与TriangleType
进行比较 .Update
由于您似乎已将
TriangleType
定义为TriangleClassifier
的内部类型,因此您需要将一个import语句添加到您的类中,或者将其引用为这里有两件事:
你真的不知道自己在做什么 . 当你处于如此水平以至于简单的编译器错误消息阻止你取得进展时,你可能不得不退后一步,专注于再次学习java基础知识,然后再让自己负担单元测试等等(尽管单元测试是一件好事,应该尽早开始使用它们 .
那我建议你停止使用assertEquals .
JUnit有另一个断言,叫做assertThat . 您可以使用它:
...在这里编译器已经给你一个提示了
是无效的 .
关于assertThat /的进一步阅读:here