プログラマーなら単体テスト(UT)も実装しよう

1 :仕様書無しさん:2013/04/07(日) 14:53:58.90 .net
おまえらちゃんとテスト作ってる?

テストメソッドの名前
どういう単位でテスト実装してるか
テストのためにアクセス指定子変える派とリフレクション使う派とどっちが多いのとか

30 :仕様書無しさん:2013/04/12(金) 01:49:21.27 .net

publicのメソッドを実行すればprivateメソッドは内部で呼び出されるんだから
publicメソッドのテストだけをやればいいという考えなら、

それに対して、システムテスト、統合テストを行えば、
publicメソッドは呼び出されるんだから、ユニットテストはいらないんじゃね?
という考えも成り立つよなと言いたくなる。

テストはなるべく小さい粒度でやるべき。それは問題は小さい方で解決したほうが
コストがかからないから。このあたり前の理由がprivateメソッドのテストにも当てはまる。
粒度が大きすぎるなら、当然小さい粒度でやるべき。粒度が問題なのであって
それがクラス内部からしか使わないのであれば、それはテストすべきprivateメソッドということになる。

173 :仕様書無しさん:2013/04/21(日) 19:03:07.21 .net

あと、テストが必要なのは大抵は一覧を取得するクエリ。
一覧を取得するクエリは、一度のクエリで全部終わるのが理想だから、内容が複雑になりがち。
まあ、Oracle SQLパズルに登場するようなクエリをいくつか合わせたようなイメージ。

165 :仕様書無しさん:2013/04/21(日) 15:04:26.91 .net

:2013/04/13(土) 17:46:47.63 .net

:2013/04/13(土) 02:04:40.92 .net

privateメソッドをテストしないの理由を聞いていてわかるのは

privateメソッドは外部から呼び出せないから
テスト出ないだけ。
その言い訳として、あーだーこーだいってる。

140 :仕様書無しさん:2013/04/20(土) 23:43:25.30 .net

:2013/04/21(日) 13:59:59.26 .net

きっちりかっちりやるなら単体テストとしてはそっち(DBはDB、アプリはアプリ)の方がいいとは思う
DBに依存したテストをやるのは単体というより結合だから、自動実行のために用意するのとはちょっと毛色が違う
ローカルで手動実行する結合してみてテストするための補助ツール的な物だと思う
クラスを作成するための支援としての単体テストや、自動テストとしてやるものとはちょっち違う感
まぁどっちが楽かはケースバイケースだと思うから、明確に線引く必要はないと思うけど

118 :仕様書無しさん:2013/04/14(日) 09:35:59.49 .net

:2013/04/14(日) 10:35:35.36 .net

でも実際DIできるのに自前でnewする馬鹿いるんだよなぁ。
1メソッドに全機能詰め込む奴とか。
Java系マはピンキリ激しくて大抵キリ側に寄ってるから、PHPerと戦わせると良い勝負しそうなの多い。

115 :仕様書無しさん:2013/04/13(土) 21:29:31.81 .net

privateメソッドのテストは、テスト対象のクラスのOpen-Closed Principleの原則を破ってしまう。
よってprivateメソッドのテストをしてはならない。

199 :仕様書無しさん:2015/08/08(土) 14:50:36.74 .net

自動化の単体テストってさ
・難しい箇所
・壊れやすそうな箇所
・壊れた結果が致命的な箇所
だけやればいいよね

一時期は、カバレッジ100%宗教に取り憑かれそうになったこともあったけどさ

76 :仕様書無しさん:2013/04/13(土) 17:14:30.97 .net

:2013/04/21(日) 23:16:18.62 .net

仕様通り動くことが確認できれば手段は何でもいいってことだな

65 :仕様書無しさん:2013/04/13(土) 10:20:01.84 .net

リファクタリング中に、テストが失敗しないことで正しさを担保できるのに、privateメソッドのテストのせいでテストが失敗し、カオスになる。
publicA()の為にprivateA()を作り、privateA()のテストを書いた。publicB()でもprivateA()をつかいたいけど、ちょっと引数を変更しなきゃ。おっと、テストが失敗しまくるぜ。

でも大丈夫。。。俺らには無限の時間があるし。テスト工数をけちっちゃけちっちゃ駄目だよね。

69 :仕様書無しさん:2013/04/13(土) 13:42:35.02 .net

privateメソッドは実装詳細なんだから、そのクラスを実装中に引数が変わったり実現内容が変わったりは
よくあること。
publicだって変わることがあるというが、それはprivateと頻度が違う。
そんなにころころpublicのI/Fが変わるとしたら、それは実装のやり方が間違ってるよ。

3 :仕様書無しさん:2013/04/07(日) 14:59:45.81 .net

最近糞コードのテスト書いてるから辛い
TDDやれとまでは言わんが、せめてテストできるレベルの実装位できるようになって欲しい
つかnUnitの使い方すら理解できないクズはプログラマー辞めちまえって思う

204 :仕様書無しさん:2015/09/09(水) 08:45:34.50 .net

:2013/04/13(土) 00:40:01.17 .net

を読み直してみろ。
単体テストでpublicのテストをすればprivateが呼び出されるからprivateのテストは不要と言うのであれば、結合テストをすればpublicメソッドが呼び出されるから単体テストは不要とも言える、というのがお前の主張。

で、そうは言えないというのが俺の主張。理由は前述の通り。

214 :仕様書無しさん:2016/09/07(水) 23:14:56.23 .net

:2013/04/13(土) 17:30:51.92 .net

テストがなければ、コードを書き換えても
テストに失敗しない!

全てのテストをなくそう!

82 :仕様書無しさん:2013/04/13(土) 17:22:59.20 .net

:2013/04/21(日) 19:37:50.67 .net

例えば、Redmineのチケット一覧ページ。
あれが実際どう実装してるのかしらないけど、まあ最終的に単一のクエリが生成されると思ってくれ。
ユーザが指定する条件で、そのクエリのwhere句が変わるのはわかると思う。
それに付け加えて例えば「管理ユーザが登録したもの」とか「直近1週間にSCMに
コミットされたもの

138 :仕様書無しさん:2013/04/20(土) 23:05:10.18 .net

俺は極論かどうかには興味が無い。
言っていることが正しいかどうかだけだ。

161 :仕様書無しさん:2013/04/21(日) 14:54:45.25 .net

:2013/04/12(金) 02:00:47.05 .net

:2013/04/11(木) 13:55:26.00 .net

:2013/04/22(月) 17:42:05.31 .net

DBにアクセスするメソッドを呼ぶメソッドのテストではmockを使うのが良い。
DBにアクセスするメソッドのテストでは、データベースに接続するのが良い。

ってことでしょ。かみ合ってないわ。

5 :仕様書無しさん:2013/04/07(日) 18:30:57.36 .net

:2013/04/14(日) 02:43:58.18 .net

自分は外部非公開メソッドのテスト書いちゃうほうだけど、
多分そういうメソッドが多くなるのは、クラスが大きすぎるのが原因なんだろうなーって思ってる

でも実務だと、抽象化しまくってかなり細かいクラスにわけちゃったりすると、
レガシー脳の奴がついてこれないどころか重複コード量産始めるから、難しい気もする
大抵はパッケージとか好き勝手に増やしたりも難しいし、あんまり細かい単位でクラス分け辛い
あとクラス外出してDIとかするのは、めんどくさいって言われそうだし

で、パブリックメソッドから分岐のある可能性のテストケース全部実装するくらいなら、
プライベートメソッドをパッケージプライベートにして、
メソッド単位でテストケース実装して動作確認するほうがいいかな、って感じに
テストを行った成果物として残せるし

107 :仕様書無しさん:2013/04/13(土) 17:47:51.59 .net

:2013/04/12(金) 00:47:38.27 .net

プライベートかどうかは関係ない。

テストの目的を考えれば、間違いやすいならば
テストを書くということは明らかにわかるはず。

149 :仕様書無しさん:2013/04/21(日) 12:24:16.20 .net

それじゃアプリケーションのテストにならんがな

97 :仕様書無しさん:2013/04/13(土) 17:38:20.75 .net

:2013/04/13(土) 18:04:44.62 .net

というか、実装詳細が何なのかわかってないんじゃ

123 :仕様書無しさん:2013/04/19(金) 12:50:20.96 .net

リファクタリングでprivateメソッド作ったらテストも作んなきゃいけないのは間違ってる気がする

55 :仕様書無しさん:2013/04/13(土) 02:52:05.36 .net

:2015/07/15(水) 23:46:00.95 .net

11 :仕様書無しさん:2013/04/08(月) 14:42:11.01 .net

:2013/04/13(土) 13:29:59.16 .net

それは理由にならないよ

171 :仕様書無しさん:2013/04/21(日) 18:54:09.50 .net

:2015/09/10(木) 17:05:21.12 .net

:2015/12/13(日) 14:36:50.26 .net

プログラマは 0-1 で割り切れないとやりたがらないからな。。
逆にいい感じにテスト書こうとすると
・難しい箇所
・壊れやすそうな箇所
・壊れた結果が致命的な箇所
の箇所がわかったり、局所化できたりするもんだね。

213 :仕様書無しさん:2016/09/07(水) 13:54:23.48 .net

このスレは初心者ばかりだな。

しかもテストフレームワークを使うことがテストみたいなことばかり言ってるし。

128 :仕様書無しさん:2013/04/20(土) 11:34:16.05 .net

:2013/04/07(日) 20:30:06.31 .net

    _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) :2013/04/22(月) 16:18:53.25 .net

:2013/04/20(土) 11:45:45.29 .net

:2013/04/07(日) 14:56:52.55 .net

関連しそうなスレ


テストを軽視する者ども
http://kohada.2ch.net/test/read.cgi/prog/1214650160/
テストデータに「test」とか「てst」とかもうやめろ
http://kohada.2ch.net/test/read.cgi/prog/1127447938/


テストしにくいコードをテストする方法教えて下さい
http://toro.2ch.net/test/read.cgi/tech/1334408391/
テストを書いてからリファクタリングなんてのは幻想
http://toro.2ch.net/test/read.cgi/tech/1349191466/
【TDD】テスト駆動開発【TestFirst】
http://toro.2ch.net/test/read.cgi/tech/1284899172/

110 :仕様書無しさん:2013/04/13(土) 17:51:22.77 .net

publicにあてはまることがprivateにもあてはまってしまうことこそが、実装詳細の変更を阻害す
要因になるってのが理解できないの?

74 :仕様書無しさん:2013/04/13(土) 17:04:09.02 .net

publicが変更されにくいってのはわかるが
privateが変更されやすいとは限らないだろ。
特に関数にするようなものは変更されにくい。

ロジックは書き換えるが、
メソッドは変更されにくいんだよ。

参考になったらSNSでシェアお願いします!

レスを投稿する(名前省略可)

この記事を読んだ方へのおすすめ

  • 40代のプログラマーいる?Part5

    元スレ 1 :仕様書無しさん:2021/06/16(水) 10:50:42.42 .net 頑張れおっさん ■前スレ 40代のプログラマーいる?Part4 https://medaka.5ch.net/test/read…

  • ユニシステム株式会社

    元スレ 1 :仕様書無しさん:2010/01/24(日) 12:01:03 .net この会社どうなんだよ。 ttp://www.unisystem.co.jp/ 71 :仕様書無しさん:2011/02/04(金) 22…

  • 50代のプログラマーいる?Part54

    元スレ 1 :仕様書無しさん:2021/07/03(土) 22:10:39.91 .net ああリューマチで膝が痛い!腰も痛い!肩も痛い! そんなんでも頑張ろう! 前スレ 50代のプログラマーいる?Part53 http…

  • プログラマの雑談部屋 ★208

    元スレ 1 :仕様書無しさん:2022/06/10(金) 17:27:29.60 .net 皆仲良くしましょう プログラマの雑談部屋 ★202 https://medaka.5ch.net/test/read.cgi/p…

  • ^をキャロットって読む奴

    元スレ 1 :仕様書無しさん:2014/07/02(水) 00:38:42.47 .net 人参かよw caret をどう読んだらキャロットって読めんだよw 18 :仕様書無しさん:2014/07/03(木) 23:49…

  • 40代のプログラマーいる?Part7

    元スレ 1 :仕様書無しさん:2021/09/04(土) 14:32:20.46 .net 頑張れおっさん ■前スレ 40代のプログラマーいる?Part6 https://medaka.5ch.net/test/read…

  • 【paiza】コーディング転職 10社目【AtCoderJobs】

    元スレ 1 :仕様書無しさん:2021/12/02(木) 13:51:51.24 .net プログラミング問題をコーディングで解いて転職に繋げるサービスについて語るスレ paiza http://paiza.jp/ (運…

  • kotlin勉強してandroidアプリ作りたいんだけど

    元スレ 1 :仕様書無しさん:2019/11/07(木) 13:08:13.84 .net udemyでおすすめの講座とか、本とかある? 若しくはサイトとか。 因みにレベルはc言語をポインタ、構造体まで勉強して、java…

  • 【相談】プログラミングを独学でやろうと思うんだが

    元スレ 1 :仕様書無しさん:2019/05/17(金) 14:12:15.60 .net 無理か? 28 :仕様書無しさん:2019/06/20(木) 21:00:30.46 .net でも英語でしょ? 通訳してくれれ…

  • プログラマの雑談部屋 ★110

    元スレ 1 :仕様書無しさん:2020/06/13(土) 19:30:04 .net 雑談スレ 6 :仕様書無しさん:2020/06/14(日) 16:54:21 .net 安全な首相官邸の中から外の困ってる人を見るカイ…

  • プロ・プログラマの雑談部屋 ★153

    元スレ 1 :仕様書無しさん:2021/08/04(水) 10:03:18.32 .net 前スレ プログラマの雑談部屋 ★148 https://medaka.5ch.net/test/read.cgi/prog/16…

  • 35歳、知的障害者のアスペ[2時間のB型作業所通い]

    元スレ 1 :仕様書無しさん:2018/04/27(金) 11:41:47.11 .net 1 名前: ◆BrBq2CJg6HGd 2018/04/23(月) 04:20:33.10 35歳(俺)に関する雑談などはこちら…

最近のコメント

匿名 : 【いちゃ部屋】株式会社SHIFT【5ch出張所】
 新入社員はわかいそう、 在宅勤務でe-ラニングうけとけ、 ... (6/18)
匿名 : 【残業代】福井 株式会社アスタ【未払い】
 プライド高いところあるけど清輝あるなら大丈夫や (5/28)
匿名 : 【残業代】福井 株式会社アスタ【未払い】
 プライド高いところあるけど清輝あるなら大丈夫か (5/07)
ページTOPへ↑