こういうのやめてほしいんです。疲れました。
@Test
public void testMethod_001 () {
try {
Foo foo = new Foo();
Object result = foo.method();
assertEquals(0, result);
} catch (Exception e) {
// ★☆★なんでこういうことするの★☆★
e.printStackTrace();
fail("テスト実行時に例外が発生しました");
}
}
単体テストがどうあるべきかとか、日常生活の中で考えたりしないんですかね?
メンテナンス不能です。こんなの。
コンソール出力を見ないとどこで例外が起きたかわかりません。
どこの現場に行っても、何回指導しても直らなくてうんざりしています。誰かがそういう風に教育しているなら改めてほしいです。
そもそも、単体テストの結果って3通りあると思うんです。
- 成功 … 正しく動いた
- 失敗 … 動いたけど結果が正しくない
- 例外 … そもそも動かない
失敗と例外は別物です。この2つを丸めてはいけません。例外は例外として通知しましょう。
テストケースが例外を投げたらレポートにもちゃんと例外の詳細が出力されるので、わざわざ Exception#printStackTrace()
なんかせずにJUnitに任せてしまうべきです。
ということで、ちゃんと例外を通知するならこうです。
@Test
public void testMethod () throws Exception { // throws句を足した
Foo foo = new Foo();
Object result = foo.method();
assertEquals(0, result);
}
もちろん、 Foo#method()
が検査例外を返さないのであれば throws Exception
無しでもいいです。何でもかんでも try
~ catch
するなって話です。
例外が発生することをテストしたいなら try
~ catch
してくれて構いませんが、ここもやはり最小限とすべきでしょうね。
@Test
public void testMethod_001 throws Exception () {
Foo foo = new Foo();
try {
Object result = foo.method();
// 例外が発生していないので失敗
fail(result);
} catch (FooException e) { // 何でもかんでもcatchしない
assertEquals("E001", e.getErrorCode());
assertEquals("氏名が入力されていません", e.getErrorMessage());
}
}