首页 文章

Java JUNIT错误

提问于
浏览
-2

我正在使用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));

ERROR Screenshot

public enum TriangleType

4 回答

  • 0

    在不深入算法的情况下,错误最明显的是 classify 方法的返回类型与单元测试形成对比 . classify 返回 TriangleType 枚举,但您的JUnit测试期望返回类型为 String 的对象 . 由于这两种类型不相等,因此预期值和实际值不能相等 . 因此测试失败了 .

    要么将测试更改为期望 TriangleType ,要么将 classify 方法更改为 String .

  • 1

    通过写作

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

    你告诉JUNIT,你希望函数返回String "ISOSCELES" . 你的函数实际返回的是常量TriangleType.ISOSCELES .
    将你的断言改为

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

    你的断言是将 StringTriangleType 进行比较,所以很自然地,这些不相等 . 你想写

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

    它将 TriangleTypeTriangleType 进行比较 .

    Update

    由于您似乎已将 TriangleType 定义为 TriangleClassifier 的内部类型,因此您需要将一个import语句添加到您的类中,或者将其引用为

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

    这里有两件事:

    • 你真的不知道自己在做什么 . 当你处于如此水平以至于简单的编译器错误消息阻止你取得进展时,你可能不得不退后一步,专注于再次学习java基础知识,然后再让自己负担单元测试等等(尽管单元测试是一件好事,应该尽早开始使用它们 .

    • 那我建议你停止使用assertEquals .

    JUnit有另一个断言,叫做assertThat . 您可以使用它:

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

    ...在这里编译器已经给你一个提示了

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

    是无效的 .

    关于assertThat /的进一步阅读:here

相关问题