使用 Unit 方法捕获多个异常
Catching multiple exceptions with Unit Method
我正在尝试为我的 suchAutor()
方法编写一个 JUnit。
问题是我抛出两个不同的异常,我只知道如何处理抛出一个异常的测试。
public Buch[] suchAutor(String gesuchterName) throws IllegalArgumentException, FileNotFoundException {
if (gesuchterName == "") {
throw new IllegalArgumentException("Bitte geben sie einen Nachnamen ein.");
}
Buch[] erg = new Buch[0];
int arraylength = 0;
Boolean found = false;
for (int i = 0; i < buecher.length; i++) {
for (int u = 0; u < buecher[i].getAutoren().length; u++) {
if (buecher[i].getAutoren()[u].getNachname() == gesuchterName) {
found = true;
arraylength++;
erg = Arrays.copyOf(erg, arraylength);
erg[arraylength - 1] = buecher[i];
}
}
}
if (found) {
System.out.println(Arrays.toString(erg));
return erg;
} else {
throw new FileNotFoundException("Zu dem gesuchten Autor wurden keine Bücher gefunden.");
}
}
@Test(expected = Exception.class)
public void testSuchAutorGrenzwert() {
try {
bibliothek.suchAutor("");
} catch (IllegalArgumentException e) {
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
}
假设 Junit4:
public class MyTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void myTest() throws IllegalArgumentException, FileNotFoundException {
thrown.expect(IllegalArgumentException.class);
myObject.suchAutor("");
}
@Test
public void myOtherTest() throws IllegalArgumentException, FileNotFoundException {
thrown.expect(FileNotFoundException.class);
myObject.suchAutor("An Unknown Autor");
}
}
在上面我们使用了相同的规则,即下面的代码应该抛出异常,如果测试没有抛出异常或抛出 IllegalArgumentException
以外的异常,那么测试将失败。
我们设置了规则,默认情况下它不期望任何异常,任何不测试异常的测试都应该正常工作。
这个问题是用junit5标记的,Jupiter有专门的assertThrows设施:
@Test
void failsOnEmptyName(){
assertThrows(IllegalArgumentException.class, ()-> bibliothek.suchAutor(""));
}
我刚刚按了快速修复,现在可以使用了:D
@Test
public void testSuchAutorGrenzwert() {
try {
bibliothek.suchAutor("");
} catch (IllegalArgumentException | FileNotFoundException e) {
// TODO Auto-generated catch block
e.getMessage();
}
}
我正在尝试为我的 suchAutor()
方法编写一个 JUnit。
问题是我抛出两个不同的异常,我只知道如何处理抛出一个异常的测试。
public Buch[] suchAutor(String gesuchterName) throws IllegalArgumentException, FileNotFoundException {
if (gesuchterName == "") {
throw new IllegalArgumentException("Bitte geben sie einen Nachnamen ein.");
}
Buch[] erg = new Buch[0];
int arraylength = 0;
Boolean found = false;
for (int i = 0; i < buecher.length; i++) {
for (int u = 0; u < buecher[i].getAutoren().length; u++) {
if (buecher[i].getAutoren()[u].getNachname() == gesuchterName) {
found = true;
arraylength++;
erg = Arrays.copyOf(erg, arraylength);
erg[arraylength - 1] = buecher[i];
}
}
}
if (found) {
System.out.println(Arrays.toString(erg));
return erg;
} else {
throw new FileNotFoundException("Zu dem gesuchten Autor wurden keine Bücher gefunden.");
}
}
@Test(expected = Exception.class)
public void testSuchAutorGrenzwert() {
try {
bibliothek.suchAutor("");
} catch (IllegalArgumentException e) {
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
}
假设 Junit4:
public class MyTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void myTest() throws IllegalArgumentException, FileNotFoundException {
thrown.expect(IllegalArgumentException.class);
myObject.suchAutor("");
}
@Test
public void myOtherTest() throws IllegalArgumentException, FileNotFoundException {
thrown.expect(FileNotFoundException.class);
myObject.suchAutor("An Unknown Autor");
}
}
在上面我们使用了相同的规则,即下面的代码应该抛出异常,如果测试没有抛出异常或抛出 IllegalArgumentException
以外的异常,那么测试将失败。
我们设置了规则,默认情况下它不期望任何异常,任何不测试异常的测试都应该正常工作。
这个问题是用junit5标记的,Jupiter有专门的assertThrows设施:
@Test
void failsOnEmptyName(){
assertThrows(IllegalArgumentException.class, ()-> bibliothek.suchAutor(""));
}
我刚刚按了快速修复,现在可以使用了:D
@Test
public void testSuchAutorGrenzwert() {
try {
bibliothek.suchAutor("");
} catch (IllegalArgumentException | FileNotFoundException e) {
// TODO Auto-generated catch block
e.getMessage();
}
}