【问题标题】:Quick JUnit Class Test tests not failed快速 JUnit 类测试测试未失败
【发布时间】:2019-07-21 13:47:42
【问题描述】:

我是 JUnit 测试的新手,我需要测试我的一门学生练习。我想测试吸气剂是否与正确的学生对象一起工作。当我给构造函数时,我还想测试是否抛出异常,例如名称“”的空字符串以及当我给出否定的“Matrikelnummer”时。

我编写的测试应该检测到没有为负的 Matrikelnummer 抛出异常,但不知何故,测试总是通过。

空字符串的测试也总是通过,即使在控制台中打印出异常消息也是如此。

我该怎么做?我正在使用 JUnit 4.7。 感谢您的帮助。

package Model;

public class Student extends Person
{
    private int Matrikelnummer;
    private Studiengruppe studiengruppe;

    public Student(String name, String vorname, int matrikelnr, Studiengruppe studiengruppe)
    {
        super(name, vorname);
        this.Matrikelnummer = matrikelnr;
        this.studiengruppe = studiengruppe;
    }

    public Student(String name, String vorname, int matrikelnr, Studiengruppe studiengruppe,
                   String strasse, String hausnummer, String ort, int plz)
    {
        super(name, vorname, strasse, hausnummer, ort, plz);
        this.Matrikelnummer = matrikelnr;
        this.studiengruppe = studiengruppe;
    }

    public int getMatrikelnummer() {
        return Matrikelnummer;
    }
    public Studiengruppe getStudiengruppe()
    {
        return studiengruppe;
    }
}

这个测试例如即使字符串不是 "" 也会传递:

    @Test(expected = NullPointerException.class) //Test der Nullpointerexception
    public void test2() {
        try {
            System.out.println("Test 2");
            Student stud = new Student("", "Luca", 6541817, Studiengruppe.IB3A);
            System.out.println("Fail, Exception not thrown");
        }
        catch(NullPointerException ex)
        {
            System.out.println(ex.getMessage());
        }
    }

【问题讨论】:

  • 你需要在构造函数中编写该逻辑,不会自动发生某些事情
  • 你能添加测试类的包导入部分吗?你确定这个测试真的运行了吗?此外,编写期望空指针异常的逻辑也不是一个好习惯。你应该检查条件并抛出更有意义的东西,比如 IllegalArgumentException 等。

标签: java testing junit


【解决方案1】:

我不确定您在那里使用了正确的注释,因为如果您在测试方法中捕获异常,它应该总是失败,因为异常不会在预期的测试中退出。此外,还有一个很好的方法 Assert.fail("some message") 您可以在构造函数调用之后使用它而不是 sysout。

另一方面,你应该知道,当你传入一个空字符串文字(“”)时,它不是空值,所以它不应该以空指针异常结束(除非有一些逻辑不与我们共享)。

此外,在构造函数中,您应该检查参数值并验证它们。如果有任何值使该对象无效,那么您应该抛出另一种类型的 RuntimeException,因为抛出空指针异常是一种不好的做法,因为运行时会“为您完成”。捕获它们也是一种不好的做法,因为与任何其他运行时异常一样,您可以在导致空指针的事件实际发生之前验证它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 2019-05-02
    • 2015-07-04
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2014-04-17
    • 2021-08-27
    相关资源
    最近更新 更多