【发布时间】:2015-01-23 20:28:03
【问题描述】:
您好,我们对车辆的构造函数进行了测试。该测试初始化了一辆没有驾驶执照的司机的车辆,它应该抛出一个异常。 代码构造函数:
public Voertuig(String Merk, Datum datumEersteIngebruikname, int Aankoopprijs, int Zitplaatsen, Mens bestuurder, Mens ... ingezetenen) {
this.nummerplaat = div.getNummerplaat();
this.Zitplaatsen = Zitplaatsen;
try {
this.Merk = Merk;
this.datumEersteIngebruikname = datumEersteIngebruikname;
this.Aankoopprijs = Aankoopprijs;
if (!Arrays.asList(bestuurder.getRijbewijs()).contains(Rijbewijs.B) || !Arrays.asList(bestuurder.getRijbewijs()).contains(Rijbewijs.BE)) {
throw new MensException("Geen correct rijbewijs");
} else {
this.bestuurder = bestuurder;
Ingezetenen.add(bestuurder);
}
Mens[] a = ingezetenen;
if (a.length > Zitplaatsen - 1) {
throw new MensException("te veel ingezetenen");
} else {
for (int i = 0; i < a.length; i++) {
ingezetenenExclBestuurder.add(a[i]);
Ingezetenen.add(a[i]);
}
}
} catch (MensException e) {
System.out.println(e.getMessage());
}
}
代码测试:
@Test(expected = be.vdab.util.mens.MensException.class)
public void test_constructor_zonder_Rijbewijs() {
//VOERTUIG B,BE//bestuurder:---
Voertuig voertuig = new TestVoertuig("auto", datum, 18300, AANTAL_INZITTENDEN, INGEZETENE_A);
}
当我运行这个专注的测试方法时,这就是结果。
-------------标准输出---------------
Geen 正确的 rijbewijs
Testcase: Testcase: test_constructor_zonder_Rijbewijs(be.vdab.voertuigen.VoertuigTest): FAILED
Expected exception: be.vdab.util.mens.MensException
junit.framework.AssertionFailedError: Expected exception: be.vdab.util.mens.MensException
因此根据输出,异常被捕获并显示,但测试失败。有人知道为什么吗?提前致谢。
编辑:我通过不包括 try-catch 块而只是抛出异常来修复它,导致必须在创建对象的每个测试方法中添加“throws MensException”。我通过调整我的自定义 MensException 来解决这个问题,而不是扩展 Exception 我让它扩展 RuntimeException 所以我不必在每个测试方法中添加“抛出 MensException”。
【问题讨论】:
-
你捕获了异常并处理了它。如果你期望一个异常,抛出它。还要确保注意该方法应该会抛出所述异常。
标签: java exception junit exception-handling