第7回:はじめての単体テスト

tsunagu column

コードのミスを早く見つける方法

単体テストとは?

開発チームのターコイズブルーです。
プログラミングの世界にはさまざまなテストがあります。
今回はその中でも単体テストというテストについて説明していこうと思います。

単体テストとは、プログラムの部品1つ1つが正しく動くかを確かめるテストのことです。

たとえば、スマホにはカメラ、時計、電話、メッセージなど、たくさんの機能があります。

もしあなたが作っているスマホを動かして不具合が出たとします。
その場合「どこが原因か」を探すのはとても大変です。

なので、まずはカメラだけ、電話だけといった風に1つの機能ごとにテストをしていきます。これが「単体テスト」です。

単体テストを行うべき理由3選

電卓アプリの例でかんたんに解説

あなたは、スマホの中にある「電卓アプリ」を作っているとします。
この電卓アプリには、次のような機能(ボタン)がついています。

  • ➕ たし算
  • ➖ ひき算
  • ✖️ かけ算
  • ➗ わり算

理由①:どこに間違いがあるかすぐわかる!

わり算の計算がおかしい!→ テストでわり算のところだけ間違って
たし算になっていた!→すぐに原因を発見!

理由②:直すのがラク!

わり算が間違っていた場合、それだけ直せばいいと普通は考えると思いますが、テストがないと、たし算・ひき算・かけ算も、ちゃんと動くか1つずつ手動で試さなければなりません。

というのも──

見た目では「わり算だけ」がおかしく見えても、実は中のしくみがつながっていたり同じ場所に書いていたりして、知らないうちに他の計算まで壊してしまっていることもあるからです。

でも、テストがあれば他の機能がちゃんと動いているか自動でチェックできるので、わり算だけに集中して直すことができます!

理由③:他の機能が壊れてないか確認できる!

わり算の機能を直したあと、たし算、ひき算、かけ算など、他の機能がちゃんと動くかも気になりますよね。

最初に作った本人なら「わり算だけ触ったから大丈夫!」と思えるかもしれませんが、そのコードを直す人は、中のしくみを全部知っているとは限りません。

「他に影響してないかな?」と心配になって、全部の機能を一つずつ確認する…ということになりがちです。

でも単体テストがあれば、自動で全部の機能がチェックされるので、「他の機能も無事だ!」とすぐに分かり、安心して修正ができます。

実際に単体テストをやってみよう!

Javaでは「JUnit(ジェイユニット)」などのテスト用のツールを使うことで、単体テストができます。まずは準備から始めましょう!

JUnitのインストール方法や実行方法は使用している開発環境によって違ってくるので、今回はその説明は省略します。試したい方は検索してみてください!

電卓アプリの中からたし算のテストだけやっていきます。
まずは電卓アプリのたし算機能を書きます。

public class Calculator {

    public int add(int a, int b) {

        return a + b;

    }

}

 次に、テストコードを書きます。

public class CalculatorTest {

  // テストをするときに使うアノテーション

    @Test 

    public void testAdd() {

        Calculator calc = new Calculator();

     // 2と3を足すと5であることを確認

        assertEquals(5, calc.add(2, 3)); 

    }

}

この状態でテストを実行するとテストが成功します。

次は別の機能を書いている時に間違って、たし算のつもりが引き算になってしまったとします。

public class Calculator {

    public int add(int a, int b) {

        return a – b;

    }

  // ↓この下に別の機能が書いてあるとします。

}

こういった場合にテストを実行するとテストが失敗します。
エラーメッセージが出て、どこで失敗したのかが分かるので、簡単に修正が出来ます。このようにテストはヒューマンエラーの為にあるとも言えます。

今回の例は簡単なのであまりありがたみが分からないと思いますが、コードが複雑になればなるほど単体テストは重要性が増してきます。

プロのプログラマーを目指すなら、コードの品質を高める実践的な単体テストの習得は必須です

今回は、単体テストについて軽く解説しました。
つなぐコミュニティーズでは単体テストについても詳しく教えて貰えて実践的なスキルをしっかりと身につけることができます。次回は、Webアプリの公開からデータ管理、業務の自動化など、さまざまな用途に欠かせないサーバーについてご紹介する予定です。