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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

3回答

5101閲覧

テストコードの置き場所

Sakaeda1112

総合スコア22

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

2クリップ

投稿2018/10/01 09:09

編集2018/10/01 13:43

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

どの言語でもいいのですが、例えば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
のようにテストコードディレクトリを内部に作る方法もあるかな?と思っています。

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

宜しくお願いします。

n4cl👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/10/01 09:48

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

2018/10/01 13:41

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

回答3

0

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

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

投稿2018/10/07 07:08

Sakaeda1112

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/07 09:17

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

0

個人の主観ですが

今時のjava

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

今時のphp
/src
/test ★

のように分離でしょう

投稿2018/10/01 23:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sakaeda1112

2018/10/02 00:32

ありがとうございます。 そうですよね、これが基本形だとは思います。ただ、ディレクトリを分けるとメインのソースコードとテストコードの対応を追いづらく、テストを書く気持ちが少し萎えるなあと。 ディレクトリを分けつつも対応するディレクトリとササッと切り替えられるような小技やツール、 同じディレクトリに置いていてもアイコン等でテストとメインのコードが見分けやすしたり、といったツール等ないかな〜と思っているのですが、、
guest

0

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

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

投稿2018/10/07 03:15

yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sakaeda1112

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

2018/10/07 06:57

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

2018/10/07 07:03

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

2018/10/07 11:11

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問