我不知道如何通过这个测试。我尝试了我想到的所有解决方案,也没有在互联网上找到解决方案。这是我去学校的考试。 所以,我有这个类 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;
}
感谢您的所有想法和解决方案:)
答案 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()
。