意外的异常预期 <nameoftheclass> 但是是 <java.lang.AssertionError>

时间:2021-02-18 00:08:29

标签: java unit-testing exception netbeans assertion

我不知道如何通过这个测试。我尝试了我想到的所有解决方案,也没有在互联网上找到解决方案。这是我去学校的考试。 所以,我有这个类 MojeException.java:

public class MojeException extends RuntimeException {

    /**
     * Creates a new instance of <code>NewException</code> without detail
     * message.
     */
    public MojeException() throws AssertionError{
       
    }

    /**
     * Constructs an instance of <code>NewException</code> with the specified
     * detail message.
     *
     * @param msg the detail message.
     */
    public MojeException(String msg) throws AssertionError {
        super(msg);
    }
}

我有这个测试:

 @Test(expected = MojeException.class)
    public void testKonstruktor11() {
        Rozmer rozmer = new Rozmer(0, 0, 0);
        fail() ;       
    }

我得到的错误是“意外异常,预期但

主要类是这个,但是我不知道它是否无关:

public class Rozmer {
public static final double DIMENZE_MAX = 100;
public static final double DIMENZE_MIN = .1;
private static final double TO_CM = 100.00;
private final long delka;
private final long sirka;
private final long vyska;
 public Rozmer(double delka, double sirka, double vyska){
        this.delka = (long)(delka * TO_CM);
        this.sirka = (long) (sirka * TO_CM);
        this.vyska = (long) (vyska * TO_CM);
    }
public double getDelka() {
        return delka/TO_CM;
    }

    public double getSirka() {
        return sirka/TO_CM;
    } 
    
    public double getVyska() {    
        return vyska/TO_CM;
    }
@Override
    public String toString() {
        return "Rozmer{" + "delka= " + delka/TO_CM + "0,sirka= " + sirka/TO_CM + "0,vyska= " + vyska/TO_CM + "0}";
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 89 * hash + (int) (this.delka ^ (this.delka >>> 32));
        hash = 89 * hash + (int) (this.sirka ^ (this.sirka >>> 32));
        hash = 89 * hash + (int) (this.vyska ^ (this.vyska >>> 32));
        return hash;
    }
@Override    
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Rozmer other = (Rozmer) obj;
        if (this.delka != other.delka) {
            return false;
        }
        if (this.sirka != other.sirka) {
            return false;
        }
        if (this.vyska != other.vyska) {
            return false;
        }
        return true;
    }
public static boolean kontrolaDimenze(double dimenze) {
        return DIMENZE_MIN <= dimenze && dimenze<=DIMENZE_MAX;
    } 

感谢您的所有想法和解决方案:)

1 个答案:

答案 0 :(得分:1)

基本上,您是在指示 JUnit 在您的测试中,您希望最终会抛出 MojeException(即 RuntimeException),并且它不是由 fail() 完成的,而是抛出一个AssertionException,所以完全不同。
因此,您必须在某处抛出该特定异常,否则您的测试将始终失败。
最好的方法可能是在你的构造函数中,因为它是你在测试中调用的唯一方法,所以看起来你正在测试那个特定的构造函数。也许在检查了与预期值不匹配的输入参数之一后,您可以抛出异常。
下面是如何修改 Rozmer 类构造函数的示例:

public Rozmer(double delka, double sirka, double vyska) throws MojeException {
    if(delka == 0.0 || sirka == 0.0 || vyska == 0.0) {
        throw new MojeException("Unsupported value for delka, sirka or vyska");
    }
    this.delka = (long)(delka * TO_CM);
    this.sirka = (long) (sirka * TO_CM);
    this.vyska = (long) (vyska * TO_CM);
}

然后从测试中删除 fail()

相关问题