Javaの単体テストで状態変化を確認するには?戻り値だけでは分からない処理のテスト|確認問題の回答例

このページは、Javaの単体テストで状態変化を確認するには?戻り値だけでは分からない処理のテストの確認問題を見直すためのページです。先に自分で考えてから、回答例と見比べてください。
確認問題の回答例
Wallet の charge は、戻り値と残高の状態変化の両方を見るとよいです。さらに、上限50000円と不正な加算金額も確認します。
| 確認したいこと | 例 | 期待する結果 |
|---|---|---|
| 戻り値 | 残高1000円に2000円を加算 | charge(2000) が 3000 を返す |
| 状態変化 | 残高1000円に2000円を加算 | getBalance() が 3000 を返す |
| 上限 | 残高49000円に2000円を加算 | 戻り値も残高も 50000 になる |
| 異常系 | charge(0) | 例外が発生する |
| 異常系 | charge(-100) | 例外が発生する |
JUnitコード例
@Test
void testChargeReturnsUpdatedBalance() {
Wallet wallet = new Wallet(1000);
int actual = wallet.charge(2000);
assertEquals(3000, actual);
}
@Test
void testChargeChangesBalance() {
Wallet wallet = new Wallet(1000);
wallet.charge(2000);
assertEquals(3000, wallet.getBalance());
}
@Test
void testChargeStopsAt50000() {
Wallet wallet = new Wallet(49000);
int actual = wallet.charge(2000);
assertEquals(50000, actual);
assertEquals(50000, wallet.getBalance());
}
@Test
void testChargeThrowsExceptionWhenAmountIsZero() {
Wallet wallet = new Wallet(1000);
assertThrows(
IllegalArgumentException.class,
() -> wallet.charge(0)
);
}
状態が変わるメソッドでは、戻り値を確認するテストだけでは、オブジェクト内部の値が本当に更新されたかまでは分かりません。必要に応じて、実行後の状態も確認します。