質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.10%

テストコードの置き場所

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 1,819

score 19

テストコードの置き場所という問題、
長らくの悩みなんですが、皆さんどうしていますか?

どの言語でもいいのですが、例えばphpでSampleというクラスが/src/model/Sample.phpにあり、
そこにfooとbarという関数があったとします。

でfooとbarそれぞれにテストコードを書くとすると、自分の場合は

/src/model/Sample.php
/src/model/Sample_fooTest.php
/src/model/Sample_barTest.php

という配置にしています。各々のテストコードファイルの中には、その関数に対するテストケースが複数ある感じです。
(仮に同ディレクトリ方式と呼ぶことにします。)
この同ディレクトリ方式だと
メリット:
・対象となるクラスにテストコードが書かれていることを把握しやすい(書かれていない場合も把握しやすい)
・テストコードと対象クラスの行ったり来たりがらく
(・言語系によっては、プロパティや関数へのアクセス制限も回避しやすくなったりするのかな。)

デメリット:
・ソースコードディレクトリがテストコードファイルだらけになり、メインのコードを探しにくくなる。

と言ったことがあるかなと思っています。

/src/model/Sample.php
/test/model/Sample_fooTest.php
/test/model/Sample_barTest.php
のようにテストコードを大本のディレクトリから分ける方式がよく見ると思いますが、
同ディレクトリ方式のメリットを捨てがたく、、

あと、同ディレクトリ方式の別バージョンで
/src/model/Sample.php
/src/model/SampleTest/Sample_fooTest.php
/src/model/SampleTest/Sample_barTest.php
のようにテストコードディレクトリを内部に作る方法もあるかな?と思っています。

上記のいずれかの方式をベースにしつつ更に良い運用の仕方や、
何かしらツールのサポートを使う方法、
はたまた全く違う方式などで良い方法があれば教えていただきたく。

宜しくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/10/01 18:48

    PHPの件であれば「PHP」タグは必要かと思います。また、テストコードってあくまでテストでしか使わないはずのものなので、ずっと残さないのであれば、要件を満たせるならどこにどのように置いても良いような?

    キャンセル

  • Sakaeda1112

    2018/10/01 22:41

    PHPに限らず、主に業務アプリケーション系に使われる言語を想定し、またそれら言語間でこのテストコードの運用方法に大きな違いは無いと思い、言語タグはつけませんでした。あえて言語を指定するなら、PHP/JAVA/Scala/Kotlin/Rubyあたりでしょうか。また、これを書いていて気が付きましたが、これら言語間でベストプラクティスが異なるようであればそのあたりも知りたいと思いました。あと、テストコードは基本的にずっと残します。回帰テストを常にしますので。

    キャンセル

回答 3

+1

個人の主観ですが

今時のjava

/src/main/java 
/src/main/resources
/src/test/java     ★testクラス置き場
/src/test/resources

今時のphp
/src
/test ★

のように分離でしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/02 09:32

    ありがとうございます。
    そうですよね、これが基本形だとは思います。ただ、ディレクトリを分けるとメインのソースコードとテストコードの対応を追いづらく、テストを書く気持ちが少し萎えるなあと。

    ディレクトリを分けつつも対応するディレクトリとササッと切り替えられるような小技やツール、
    同じディレクトリに置いていてもアイコン等でテストとメインのコードが見分けやすしたり、といったツール等ないかな〜と思っているのですが、、

    キャンセル

+1

解決、というほどの方法ではないのですが、
「あるパッケージ内で、クラスに対するテストコードが肥大化する」ということは「そのクラス自体が肥大化している」ということだとみなし、
そういった兆候があれば、そのクラス&テストをサブパッケージとして分離する、
というのがいいのかな?と思うようになってきました。

とりあえず、これを自己解決としておきますが、異論やもっとベターな方法があれば随時コメント下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/07 18:17

    java で test パッケージといえば昔はそれなりに取られてた内容ですが テストケースが網羅できないので廃れましたね。

    キャンセル

0

個人の意見だったりjavaだったりもしかしたら間違ってたりするかもしれませんが、ご了承ください。
私だったら、
src/model/sample.java
src/test/sampletest.java

上の人と一緒です。
JSやRubyはわかりませんが、eclipseを使うとF3で関数の呼び出し元が開けたり、
IDEだとそういう機能があるかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/07 15:47

    ありがとうございます。
    関数の呼び出し元に飛んだり戻ったりはIDEでできるんですが、やはり同じディレクトリにあることのメリットは捨てがたく。。。

    でも同ディレクトリタイプはまだあまり浸透してないんですかねえ。
    同ディレクトリタイプを推奨する文章、ところどころで見かけるのですが。
    (最近見たのだとangularの
    https://angular.io/guide/testing#why-put-spec-file-next-to-the-file-it-tests
    とか。)

    ・Such tests are easy to find.
    ・You see at a glance if a part of your application lacks tests.
    ・Nearby tests can reveal how a part works in context.
    ・When you move the source (inevitable), you remember to move the test.
    ・When you rename the source file (inevitable), you remember to rename the test file.


    自分も最近のプロジェクトでは同ディレクトリタイプにしてみて、かなりテスト(とメインロジックの開発も)捗るようになったのですが、プロジェクトが大きくなり、ドメインも大きくなるにつれ、だんだんテストコードだらけになってちょっとな〜、となってさらなるベストプラクティスを探っているんですが。。

    キャンセル

  • 2018/10/07 15:57

    確かに同ディレクトリは難しいですよね。
    あまり関係ないですが、「東方弾幕風」というのだとテキストであればいいから拡張子を変える、
    なんてことができるんですけどね~。

    キャンセル

  • 2018/10/07 16:03

    「東方弾幕風」恥ずかしながら初耳です。調べてみます。参考になるかなあ

    キャンセル

  • 2018/10/07 20:11

    あ、大事なこと忘れてましたが、ゲームですので、ほとんど参考にならないかと。今更ですいません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る