Javaの単体テストに書いたメインメソッド、納品前に削除するべき?新人エンジニアの疑問に答えます

こんにちは。ゆうせいです。
今回は、新人エンジニアの方からよくある質問に答えていきます。

「単体テストのためにJavaクラスに main メソッドを追加したけど、これって納品時に消すべきですか?」

という素朴な疑問です。確かにテストのために一時的に書いたコードをどう扱うか、迷いますよね。結論から言うと、基本的には削除すべきです。

では、なぜ削除すべきなのか?もし削除しないとどんな問題があるのか?詳しく見ていきましょう!


Javaのメインメソッドとは?

Javaにおけるmainメソッドとは、以下のような形で書かれる、プログラムのエントリーポイントです。

public static void main(String[] args)

日本語で言うと「このメソッドからJavaアプリケーションを実行しますよ」というスタート地点を意味します。

単体テストのためにこのメソッドを各クラスに追加しておくと、そのクラスだけを実行して動作確認ができるので、とても便利です。


なぜ削除すべきなのか?

1. テストコードの管理が煩雑になるから

本来、テストはテスト専用のコードとして管理するべきです。メインメソッドを業務ロジックのクラスに紛れ込ませてしまうと、本番コードとテストコードの境界が曖昧になってしまいます。

例えるなら、出荷用の弁当に「味見用の一口」を入れっぱなしでお客様に渡すようなものです。


2. JUnitなどの正式なテスト手法が推奨されるから

Javaの世界では、テストはJUnitというフレームワークで書くのが基本です。
JUnitではこんな感じでテストを書きます:

@Test
public void testAdd() {
    Calculator calc = new Calculator();
    assertEquals(5, calc.add(2, 3));
}

mainメソッドを使うよりも以下のようなメリットがあります。

JUnitテストmainメソッドテスト
自動化しやすい手動実行が必要
テストの失敗箇所が明確結果を自分で確認する必要
CI(継続的インテグレーション)と連携可能自動実行できない

3. セキュリティや保守性の問題があるから

メインメソッドを残したままだと、意図しない使い方や動作が可能になってしまうことがあります。
特にメソッド内にログイン処理やデータ操作のコードが含まれていた場合、予期せぬ実行で本番データに影響を与える可能性も。


消さなくても良い場合はある?

例外的に、ユーティリティクラスのデモや、公式にサンプルとして提供するコードであれば、メインメソッドがあることで利用者がすぐに動かせるメリットがあります。
ただし、納品するアプリケーション本体においては、そのような例外は非常にまれです。


新人エンジニアに伝えたいこと

  • 単体テストは JUnit を使うようにしましょう!
  • メインメソッドでのテストは開発中の一時的な手段と割り切りましょう。
  • 納品前には「コードの掃除」を忘れずに! テスト用メインメソッドは削除してください。

今後の学習指針

これからは以下のようなことを意識して学んでいきましょう。

  • JUnitの使い方とアサーションの書き方を練習する
  • テスト駆動開発(TDD)の基本を理解する
  • CIツール(GitHub Actions, Jenkinsなど)との連携を経験してみる

テストコードをきちんと管理できるようになると、チーム開発でも信頼されますよ!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。