私はPersonを受け取り、PersonException(私のカスタム例外)が返されるかどうかを調べるJUnitテストを行っています。 PersonExceptionがExceptionを継承し、Personが100を超える場合にPersonExceptionをスローするメソッドSetDOB()があります。これまでのところ例外はコンソールに表示されますが、何らかの理由でテストに失敗しました。関連するコードは次のとおりです。カスタムJava例外が失敗するJUnitテスト
//JUnit Test
@Test(expected = PersonException.class)
public void testBadShieffer1() {
Staff wrongShieffer = new Staff("Bob", "Lloyd", "Shnieffer",
new Date(1737, 2, 25), "Shieffer Lane", "21277777778" /*PhoneNumber*/ ,
"[email protected]",
"Radio time.", 10, 500000.00, new Date(1991 + 1900, 1, 1), eTitle.MR);
//This constructor calls SetDOB()
fail("No PersonExceptions were thrown.");
}
//setDOB
public void setDOB(Date DOB) {
try {
if (((new Date()).getYear() + 1900) > DOB.getYear() + 100)
throw new PersonException(this);
else
this.DOB = DOB;
} catch (PersonException p) {
System.out.println(p + " is over 100 years old!");
}
}
//PersonException class
public class PersonException extends Exception {
private Person p;
public PersonException() {
super();
}
public PersonException(String message) {
super(message);
}
public PersonException(Person p) {
super(p.getLastName());
this.p = p;
}
public Person P() {
return p;
}
}
これは長い少しである場合、私は謝罪が、私は存在があるにする必要がありますすべてを信じて。助けをあらかじめありがとう!
アドバイスの言葉ではなく、Java 8 time api(https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)を使用してください。非常に悪いと不自由な古い日付のAPI(http://stackoverflow.com/questions/1969442/whats-wrong-with-java-date-time-api)。 – ThisIsNoZaku
書かれているように、 'setDOB'は投げられた直後に' setDOB'メソッド内で捕捉しているので、 'setDOB'は決して' PersonException'を投げません。 '(expected = PersonException.class)'を使ったテストは、例外を捕捉することになります。 – Thomas
トーマス、返事をありがとう。それは実際に私の推測でもありました。しかし、私はそれをキャッチすることなく、tryステートメントで例外をスローする方法についてはわかりません。助言がありますか? – JonRicardo