java - 快速 JUnit 类测试测试未失败

标签 java testing junit

我是 JUnit 测试的新手,我需要为学生练习测试我的一个类(class)。我想测试 setter/getter 是否可以使用正确的学生对象。我还想测试是否有异常抛出,当我给构造函数例如名称“”的空字符串以及当我给出负数“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());
        }
    }

最佳答案

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

另一方面,您应该知道,当您传入空字符串文字 ("") 时,它不是 null,因此它不应该以空指针异常结束(除非有一些逻辑不与我们共享)。

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

关于java - 快速 JUnit 类测试测试未失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57133788/

相关文章:

java - 如何将枚举转换为固定大小的 byte[]

java - 延迟获取数据时出现异常 - JUnit 测试

junit - 如何使用 PowerMockito 捕获构造函数参数

java - PSQL异常 : ERROR: insert or update on table "*" violates foreign key constraint

java - SmartGWT ComboBoxItem 获取所有记录

java - Java 8 中 try-with-resources block 中的锁风险

angularjs - Protractor 测试后清理

unit-testing - 创建易于维护的测试

c++ - 测试 DLL 函数的最佳方法是什么?

java - 如何在 Spring Boot 中测试组件/bean