カプセル化■プライベートメソッドをテストする方法

■ このスレッドは過去ログ倉庫に格納されています
2020/07/05(日) 20:47:46.60ID:M+BkbwUs
■短い回答
プライベートをテストしたい場合は設計に問題があるので、パブリックに変更してテストしましょう

■これに対する(変な人の)驚いた反論

プライベートを一時的にパブリックにして、テストが終わったら
プライベートに戻すなんてやるわけないだろw
↑誰もそんなコトしろなんて言ってない

■テスト専門家による回答

t-wadaのブログ
https://t-wada.hatenablog.jp/entry/should-we-test-private-methods

短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。

ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。
プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
プライベートなメソッドのテストに関しては、4つの考え方があります。

・パブリックメソッド経由でテストする
・別クラスのパブリックメソッドとする
・テスト対象の可視性を(やや)上げる
・プライベートのまま、リフレクションでアクセスしてテストを書く

パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを示唆している場合があります。
テストがどうしても書きたい場合は、その責務はテスト対象のプライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。
2020/07/08(水) 21:19:38.42ID:hmU+YLWt
>>189
あのさぁ、ごまかしてないでちゃんと書こうよ?

最小、最大、中間値のテストやってれば
最小、最大、中間値ではない3のテストなんて不要なんだよって
ちゃんといわないと、あのバカには伝わらないよ?
2020/07/08(水) 23:59:05.09ID:hEQaHqpN
最小、最大、中間値って聞いたことがないけど
どこかの分野で一般的に使われてるもの?

境界値分析なら
境界値と境界値の内側と外側の3値か
境界値と境界値の外側の2値かどっちかが一般的だと思う
2020/07/09(木) 00:14:35.43ID:qGUjUa51
>>191
3と78がそれに当たると申すか?
2020/07/09(木) 00:16:52.90ID:tq6y70T3
俺もそう思ってたけど、そもそもスレタイともずれてきてるよねっていう
2020/07/09(木) 00:21:36.93ID:Ai/0yITE
3と78の伏線が
今、回収されたのか?
195デフォルトの名無しさん
垢版 |
2020/07/10(金) 12:24:37.85ID:sSLzYC6I
詳細を知ってはならないということは、詳細の知識、つまり境界を知ってはならないということ。

「彼らはオブジェクト指向を全く知らない可哀そうな人ではないか?Javaを学ぶべきだ!」などと言う前に、原典に当たろう。
2020/07/10(金) 12:25:53.05ID:A+QDXq04
>>195
オブジェクト指向と関係ない話なら、関係ないって書いとけよ
2020/07/10(金) 12:54:55.71ID:1UxRpBTq
zTLocdwC以外、Javaなんて誰も言ってないけど?何が言いたいんだ?

スレタイはカプセル化って書いてあるしOOPは理解している前提でしょ?
まぁ、明らかにOOPを理解していない人が発狂していたけど。
198デフォルトの名無しさん
垢版 |
2020/07/10(金) 14:04:44.56ID:sSLzYC6I
いや、おそらくわかっていないだろう。
199デフォルトの名無しさん
垢版 |
2020/07/10(金) 14:09:26.25ID:sSLzYC6I
オブジェクト指向のすばらしさを語っている人が、一番オブジェクト指向を知らない。
ゆえに議論が成り立たないという状態ではないだろか。
200デフォルトの名無しさん
垢版 |
2020/07/10(金) 14:12:09.99ID:sSLzYC6I
>>196
隠ぺいとオブジェクト指向は直行する概念ではある。
とはいえ、事実上同時に用いられるので、関係ないとは言えないのではないか。
2020/07/10(金) 15:02:20.85ID:zQa5K81u
>>200
そもそも、このスレで誰もオブジェクト指向の素晴らしさなんて語っていない。

さっきから誰に対して言ってるんだ...。
2020/07/10(金) 15:16:19.83ID:TbXdOMZ+
ポエってるやつがいるな
203デフォルトの名無しさん
垢版 |
2020/07/10(金) 16:07:13.59ID:sSLzYC6I
和田メソッドを称賛してる人たちに決まってるだろ。
2020/07/10(金) 16:35:36.39ID:zQa5K81u
和田メソッドって何?
205デフォルトの名無しさん
垢版 |
2020/07/10(金) 17:14:49.72ID:sSLzYC6I
>>1 に書いてあるだろ。
2020/07/10(金) 17:42:15.92ID:A+QDXq04
>>1に書いてあるのはただの常識で
和田メソッドなんて特別な名前じゃないよ
207デフォルトの名無しさん
垢版 |
2020/07/10(金) 20:12:23.39ID:FovnwiSG
常識を疑え、それって和田メソッドじゃないかって
2020/07/10(金) 20:49:58.98ID:zQa5K81u
常識じゃん。むしろ、常識を疑うその心を疑え。それって経験不足では?

まぁ、強いて言うのなら、リフレクションを用いてテストは、許してはならない反則行為だと思うがな。
特に、カバレッジテストとかする場合は。
2020/07/10(金) 21:00:54.86ID:zQa5K81u
ただ、記事を書いた和田さん?も、記事を読むとその危険性を理解しているみたいだから対立する気はないよ。
黒魔術と言ってるし。

なんで黒魔術なんでしょうねぇ(すっとぼけ)
210デフォルトの名無しさん
垢版 |
2020/07/10(金) 21:09:49.17ID:HmvrAlYz
そりゃC++への嫉妬だろ
C++はそう呼ばれるのに、Javaは何故かそうは呼ばれない、それは何故か?
Javaに欠けているものとは一体……?!
2020/07/10(金) 21:30:17.43ID:LiH0PaR7
黒魔術って言われ方を誉め言葉だと思ってる馬鹿ってほんとにいるんだな。。
2020/07/10(金) 21:36:39.85ID:pLXOeUja
オブジェクトが隠蔽・カプセル化するものだからといってホワイトボックステストまで否定しちゃうのは変な話。
2020/07/10(金) 21:51:04.37ID:zQa5K81u
ホワイトボックステストを否定する気はないけど...例えば
>>88のコードを借りるけど

> queue = Queue()
> queue.push(17)
> asserEqual( queue.length, 1)
> a = queue.pop()
> assertEqual( a, 17)
> assertEqual( quele.length, 0)

こんなノリでprivateだったメソッドをpublicにしたり、リフレクションを使って呼び出すとする。

queue.内部実装()

...で、これでカバレッジテストに合格しちゃったらどうするの?

Queueというクラスはテストに合格したと見なすの?
テストってテスト項目に合否判定を出す作業だと思うのだが、内部実装の呼び出しで合否判定を変えるなんてチートは駄目だと思う。

そもそも、privateメソッドを定義するケース自体、珍しいから、経験則に基づかない発言でもあるが...。
214デフォルトの名無しさん
垢版 |
2020/07/10(金) 21:56:59.04ID:FovnwiSG
和田メソッドは非常識
215デフォルトの名無しさん
垢版 |
2020/07/10(金) 22:02:19.60ID:FovnwiSG
和田さんはQueueを実装したことない素人
2020/07/10(金) 22:04:28.86ID:zQa5K81u
あー...うん、俺の言い方が悪かったかも。
privateメソッドをテストするというレアケースだから許してくれ。
常識が無い以上、もっと正確に細かく伝えるべきだったな。

ただ、俺の主張(リフレクションは反則
行為)の弱い点を言うと、OOPやDDDの概念を無視した設計には、こちらの主張は当てはまらない。
そう思うと、和田さんのリフレクションをギリギリ許容(?)するような記事の書き方も否定はできん。

なんだかんだで、彼の記事は自分が記事を書くよりは無難にまとめられているとは思う。
まぁ、記事を書いたことないけど。
2020/07/10(金) 22:09:19.05ID:pPoV7F8C
ユーザーが直接public methodを使うわけじゃなければ
public methodだって実装の詳細

integration test経由で
必要なpublic methodはテストできるんだから
個別にすべてのpublic methodをテストする必要なんてない

というのと似たようなもの
それでいい場合もあればそうじゃない場合もあるというだけ
218デフォルトの名無しさん
垢版 |
2020/07/10(金) 22:23:15.71ID:FovnwiSG
まあね、処理の複雑さによるのだろうね
hello world程度ならテストさえ必要ないだろうし
2020/07/10(金) 22:31:36.66ID:pLXOeUja
>>213
どうするの?っていうそこの何が問題なのかわからん。
必要以上の詳細をテストしてしまうことによってテストが壊れやすくなるという
一般的な話以上のものではないように思うが。
2020/07/10(金) 22:38:32.51ID:d7aQvYi7
そこで、テスト駆動開発ですよ。
最初にテストケースを定義してそれをパスする
コードを書けばpublicだのprivateだの議論は不要

だれかこの開発方法やってる?
221デフォルトの名無しさん
垢版 |
2020/07/10(金) 22:54:55.64ID:FovnwiSG
>>220
privateだとテストケース書けないじゃん
2020/07/10(金) 23:26:01.49ID:zQa5K81u
>>219
不合格になるはずのテストに合格してしまうのが問題なんだよ。

>>220
テスト駆動開発は社内でも聞いたことがあるけど、実践はしてない。
まぁ、自分自身、詳細は知らない。後で調べるか。
2020/07/11(土) 00:18:29.78ID:E2OZ8LYK
>>213
> ...で、これでカバレッジテストに合格しちゃったらどうするの?

テストはテストコードを見ないで
OKってでたからOKだ
ってやるもんじゃないよ


テストコードはレビューするものだ
通ったからOKじゃなくて、通るのは当たり前で
テストコードを見て正しくテストされてることを確認する

テスト結果のOKが「エビデンス」なのではなくテストコードが「エビデンス」
動作してることを証明するスクリーンショット(笑)と同じもの
「エビデンス」は見て確認しなければいけない
2020/07/11(土) 00:21:18.34ID:E2OZ8LYK
>>221
テストケースがあるもの=publicメソッドで
privateは中で必要に応じて作るもの
メソッドにしてもいいしメソッドにしなくてもいい

テストケース書けないなら関数にせずにそのまま埋め込めよ
publicメソッドのテストケースが問題ないなら
中の詳細なテストなんかいらんだろ
メソッドにしてないかもしれないし
2020/07/11(土) 00:34:45.26ID:0BF0aQZE
何回繰り返すのこの流れww
226デフォルトの名無しさん
垢版 |
2020/07/11(土) 00:40:55.17ID:JFnadz6+
何度でもだ!
227デフォルトの名無しさん
垢版 |
2020/07/11(土) 00:42:45.65ID:JFnadz6+
>>224
テストケースが書けないってだけでインライン展開するんすか?
構造化プログラミングを愚弄する狼藉っすよ
遠山の金さんの桜吹雪を拝むことになりますよ
228デフォルトの名無しさん
垢版 |
2020/07/11(土) 00:43:07.74ID:JFnadz6+
遠山の和田さん
229デフォルトの名無しさん
垢版 |
2020/07/11(土) 00:45:42.66ID:JFnadz6+
privateではなくてパッケージプライベートにした方がええのかもわからんね
2020/07/11(土) 00:53:34.50ID:JFnadz6+
それで破綻するならパッケージの設計がよろしくないということで
2020/07/11(土) 01:01:26.38ID:E2OZ8LYK
>>227
テストケースが書けるならばpublicにすればいいだろ?
テストケースがある=仕様が明確になってる証拠
2020/07/11(土) 01:06:55.98ID:E2OZ8LYK
なんでテストケースが作れるのに、publicにしないのかわからん
2020/07/11(土) 01:42:00.39ID:H19stfAl
https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcTboCDgKcAdRNVwzxZWd6r45jypRuoKCBL21A&;usqp=CAU
2020/07/11(土) 02:18:29.03ID:wIsoNFzM
privateでかっこいいメソッドなんだろうがよ!

いや、俺実はpublic staticしか作らんけど
2020/07/11(土) 02:41:27.63ID:P8l8Ig/I
>>222
正直、開発自体をテスト工藤開発で終えるのはキツいと思うけど、
コーディング→動作確認→デバッグ→リファクタリングの
プログラマー個人の短いサイクルでのトライ&エラーには結構使えるんじゃないかと思う。

カバレッジ100%のテストケースは作る工数とメンテが大変だからそこまでする必要はないと思うけど、
そこそこのカバレッジでプログラマーが個人で高速に開発を回せるのは強い。

カバレッジ100%目指すのは単体テストの時だけで十分
2020/07/11(土) 02:42:42.87ID:E2OZ8LYK
>>235
せやかて
237デフォルトの名無しさん
垢版 |
2020/07/11(土) 06:05:52.59ID:KCR4lRFo
t-wada氏の推奨する和田メソッド。
238デフォルトの名無しさん
垢版 |
2020/07/11(土) 06:15:18.08ID:KCR4lRFo
和田メソッドによると「非公開メンバをテストすると品質が下がるので絶対するな!」
2020/07/11(土) 07:08:50.24ID:DdDKJrYh
>>238
それどこに書いてあるの?
240デフォルトの名無しさん
垢版 |
2020/07/11(土) 07:51:10.03ID:KCR4lRFo
意識が高くなりすぎて幽体離脱した感のある和田メソッドをよろしく!
2020/07/11(土) 07:55:47.65ID:Cl4N6Aux
>>22
いや、その「不合格になるはず」のところがわからん。
呼べないはずの内部実装が呼べちゃったってこと?
2020/07/11(土) 09:06:32.32ID:JaL6gziv
>>241
合否判定が変わる例ってこんな感じじゃない?
不当に不合格になる例

queue = Queue()
queue.push(17)
asserEqual( queue.length, 1)
a = queue.pop()

queue.内部実装()

assertEqual( a, 17) ←不合格
assertEqual( quele.length, 0)

※ユーザーが呼べるメソッドを呼んだら、なんか破綻したケース

あるいは網羅テストをやってて、不当に合格する例
for(i = 0 ; i<127;i++){
queue.内部実装(i)
}

内部処理{
switch(条件)
以下略
}

条件分岐を全て網羅したから合格。
はおかしい。
queue.pushやpopの呼び出しで合格できなかった網羅テストを内部実装を直接呼び出して合格って変な話。

という意味では?
2020/07/11(土) 09:23:48.86ID:wIsoNFzM
>>242
でもカバレッジって落ちないぜ以上の意味を取るのって無理じゃね?
2020/07/11(土) 09:26:28.69ID:Cl4N6Aux
>>242
いや、ますますわからん。
そのタイミングで内部実装()呼んでもaの値は変わらんと思うが?

pop()の前に呼ぶんだとしたらなんでそんなテストを書くんだという話になるし。
異なる操作をしたならassert条件が変わるのは当たり前。
2020/07/11(土) 09:35:57.08ID:JaL6gziv
>>244
前者は私のミス

>>243
ごめん、カバレッジやったことないから間違っていたら謝る

うーん、この解釈を間違えた感
2020/07/11(土) 09:55:21.63ID:fJlL8BSP
>>242
まずテストの考え方が違うんだよ。

全ての組み合わせをテストする完全な網羅テストは時間的に不可能
その他のテストも数によっては現実的に不可能となることが多い
通常カバレッジ100%というのは命令網羅テストにすぎない
だが命令網羅テストをやってれば完璧かと言うかそうではない

じゃあどれをやればいいんだよ!?と思うかもしれないが、どれをやるかじゃない
何をやれば自分が作ったものが正しく動くと自信が持てるかなんだよ
現実的に実現可能であるというルールを加えれば、完璧なテストなんてできやしない。

内部実装を直接呼び出して合格したとしても、
それで正しく動くと自信が持てるなら、それで全然かまわないんだよ。
ただしテストする以上、内部実装の仕様を明確にしなきゃテストのレビューはできなくなる。
内部実装の仕様が明確になったならpublicにして問題ない。

おまけだが、pubicメソッドのテストでもprivateメソッドのテストでも
カバレッジを計測するなら、それはホワイトボックステストだからな
なんか間違ってる人がいるようだから
2020/07/11(土) 09:55:24.65ID:0/l6dmQ+
結局クラス分けするなりしてpublicにする部分を多くする、
テストと使用する局面で可視性を変える
の二つしかないわけで、プログラム機能でどうこうする話じゃない。
使う奴が理解して使うという話以上にはならん。
2020/07/11(土) 10:23:35.92ID:Cl4N6Aux
「privateメソッドがテストできないんですがどうしたらいいですか?」という疑問に対して、
なんとかしてテストする方法を編み出すのではなく「privateメソッドはテストしなくていい!」という
逆転の発想というかバッサリ感が中二受けしたんだと思う。
2020/07/11(土) 10:26:24.09ID:KzXDm3Nb
じゃあ編み出してどうぞ
2020/07/11(土) 10:36:26.55ID:fJlL8BSP
>>248
逆転の発想じゃなくて普通の発想じゃね?
privateなんだから
2020/07/11(土) 10:53:54.57ID:Cl4N6Aux
だって可視性とテストするしないの関係は自明じゃないじゃん。
それが関係あるなら外部にexportする関数以外はテストしなくていいことになるんじゃね?
252デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:13:39.51ID:JFnadz6+
>>231
教えてしんぜよう
アクセス修飾子は仕様が明確になってることを表すものではないからだ
253デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:16:43.36ID:JFnadz6+
publicにしたら全然関係ないパッケージからもアクセスされてしまうからね
不必要な依存を発生させることになってしまう、密結合が促進されるね
そういう意識のない人間が >>3 のような下痢便コードを書いてしまうんだね
2020/07/11(土) 11:18:39.33ID:fJlL8BSP
>>252
アクセス修飾子は仕様が明確になってることを表すなんて言ってないよ
仕様が明確になってるならpublicでいいと言ってるだけ
2020/07/11(土) 11:19:08.47ID:fJlL8BSP
>>253
> publicにしたら全然関係ないパッケージからもアクセスされてしまうからね

全然関係ないパッケージ = テストコード
アクセスできてなにか問題あるの?
256デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:20:35.92ID:JFnadz6+
>>254
言ってるじゃん、アクセス修飾子とメソッドの仕様が明確になってるかは無関係
257デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:21:19.03ID:JFnadz6+
>>255
何いってんのお前
テストは同じパッケージにするのが基本だろ
テストしたこと無いの?
258デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:22:19.30ID:JFnadz6+
テストから呼び出せるのが問題なんじゃなくて
関係ないパッケージから呼び出されて密結合になるのが問題だと言ってる
259デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:22:42.09ID:JFnadz6+
だからパッケージプライベートなら良いだろうと言ってるわけ
2020/07/11(土) 11:25:32.87ID:fJlL8BSP
>>256
言ってないよ?

外部からアクセスしないならprivate。
でも仕様がはっきりしてるならpublicにしていい。

facebookでもプライベートな話は他人に見せる必要がないからprivateだけど
別に他人に見せてもいいならpublicにしてもいいよね
それと一緒
261デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:26:14.03ID:JFnadz6+
パッケージプライベートだと同じパッケージからならアクセスして良いというメッセージを
開発者に伝えてしまうから望まない依存を生んでしまうリスクはある
どのオブジェクトからも参照されたくない場合もあるからな、やはりprivateをテストできない
言語が遅れてるだけなのだろうね
2020/07/11(土) 11:26:21.59ID:fJlL8BSP
>>257
> テストは同じパッケージにするのが基本だろ

Java以外で、同じパッケージとはなんのことで
そうするとどうなるんですか?
263デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:27:14.70ID:JFnadz6+
>>260
外部からアクセスしないけれども仕様がはっきりしてるからpublicにするのはありえないってことですよ
なぜならば密結合になってしまうから
2020/07/11(土) 11:27:56.48ID:fJlL8BSP
>>261
privateをテストできる言語っていうのは
単に全てpublicになっているのと一緒

アンダースコアで、これはアクセスできるけど
privateという意味ですよと言ってるのと何も変わらないよ
265デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:28:00.37ID:JFnadz6+
>>262
Javaの話ですよ
266デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:28:48.86ID:JFnadz6+
>>264
アンダースコア?
そうなの? 全部の言語がそんな仕様なの?
それは知らなかったなー
2020/07/11(土) 11:29:55.28ID:fJlL8BSP
>>263
仕様がはっきりしてるからpublicにするんじゃなくて
仕様をはっきりさせれば、publicにしてもよいと言ってるだけ
理由がなければprivateのままでもいい。どちらでもいい。
テストしたい=理由。理由があるならpublicにしていい。

> なぜならば密結合になってしまうから
テストコードから仕様がはっきりしないprivateをテストすること=密結合
密結合を避けるためにも、公開されたインターフェースにするのが正しい
268デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:30:13.81ID:JFnadz6+
RustやGoはprivateもテストできるよって言ってる人いたから
最近の言語ではprivateもテストできるんだーって思ってたけど
命名規則でアクセス修飾子の代わりを果たしてるんだってことだったの? それは知らなかったなー
2020/07/11(土) 11:30:22.00ID:fJlL8BSP
>>265
Java以外を知らないんですか

>>266
Java以外を知らいんですかw
2020/07/11(土) 11:30:59.34ID:fJlL8BSP
>>268
ああ、人から聞いただけなのねw
271デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:31:27.48ID:JFnadz6+
>>267
仕様がはっきりしててもpublicにしてはいけないからprivateなんだよ
テストが依存することを密結合とは言わないよ
272デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:31:51.16ID:JFnadz6+
>>269
知らないよ

>>270
そうだよ
2020/07/11(土) 11:32:06.66ID:fJlL8BSP
privateにあくせすできる言語でも
テストするならどちらにしろ仕様をはっきりさせないといけない

そうしないとテストコードがあったからといって
これが正しく仕様を満たしているのか?なんてわからない
274デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:35:07.08ID:JFnadz6+
さすがです >>3 の下痢便コード書くだけありますね
何言ってるのかさっぱりわからない
2020/07/11(土) 11:36:54.90ID:fJlL8BSP
>>3のコードを書いたのは別の人。

そもそも>>3のコードをクソコードと言って
このスレにコピペしたのが俺
276デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:38:14.80ID:JFnadz6+
>>275
そうすると君はMainを勘違いしてた人か、僕と仲直りしますか?
277デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:39:33.67ID:JFnadz6+
同じ人が同じこと言ってるだけのスレ
でもそんなスレも良いですよね
278デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:47:13.10ID:JFnadz6+
たとえばこの先Javaが進化したとしてテストオブジェクトのみを特別視して
テストオブジェクトからのみprivateにアクセスできるようになったとすると
テストオブジェクトをオブジェクト指向の枠組みで捉えるならば
オブジェクト指向としては破綻してる

Javaは受け入れないだろうね、Microsoftがdelegateを提案したときも
interfaceという仕組みがあるんだからdelegateは邪道だと言って蹴ったからなあ

実益に叶うという理由で根本的なところまで作り変えることができるのは
Microsoftだろうなあ、Javaの前にC#が対応しそうな予感はある
279デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:52:27.04ID:JFnadz6+
いまの言語仕様での最適解は >>5 ですね
これ書いた人は天才だと思いますよ
何気ないことだけれどもコードの隅々にまで神経が行き届いていて
美しく整備されて堅牢なコードです、オブジェクト指向の限界を示したと言って良いですね
2020/07/11(土) 11:55:21.12ID:0/l6dmQ+
>>248
逆転の発想じゃなくて都合のいいことを信じたい馬鹿の発想だろ
2020/07/11(土) 12:00:30.64ID:Cl4N6Aux
テストコードは設計の外にあるものだからクラスの可視性とか直接関係ないだろ。
ふつう、設計書のクラス図にテストクラスを書いたりはしない。
2020/07/11(土) 12:02:06.50ID:wIsoNFzM
書いてもいいかなとは思う
283デフォルトの名無しさん
垢版 |
2020/07/11(土) 12:06:30.88ID:JFnadz6+
>>281
そうなんだよねー
2020/07/11(土) 12:09:38.93ID:fJlL8BSP
>>281
クラス図にprivateメソッドを書きますか?
285デフォルトの名無しさん
垢版 |
2020/07/11(土) 12:11:12.25ID:JFnadz6+
クラス内を調査してprivateメソッドを列挙して
同クラス内のprivateメソッドをテストするコードを列挙して
カバレッジを計測するツールがあればみんな幸せになれそうですね

カバレッジ計測ツールがprivateメソッドには今の時点で対応してないって
だけでprivateメソッドのテスト自体は >>5 のように書けますから
ツールの開発が遅れてるだけなのかも知れませんね
2020/07/11(土) 12:12:35.29ID:fJlL8BSP
>>285
もしかしてお前カバレッジの意味がわかってないんじゃね?

publicメソッドの中からprivateメソッドが呼び出された時
privateメソッドの行は実行された=カバレッジとして計測される

ってことは知ってますよね?
2020/07/11(土) 12:15:06.18ID:fJlL8BSP
世の中にある全てのカバレッジ計測ツールは
privateメソッド内の実行した行を測定できるのですが
>>285を見る限り何もわかってない気がしますねw
288デフォルトの名無しさん
垢版 |
2020/07/11(土) 12:15:29.92ID:JFnadz6+
>>286
僕は単体テストやったこと無い
カバレッジの計測もしたことないからわからない
僕は知りません
2020/07/11(土) 12:16:06.22ID:fJlL8BSP
>>288
だから>>285みたいな的はずれなことを言ってるんだねw
290デフォルトの名無しさん
垢版 |
2020/07/11(土) 12:17:45.08ID:JFnadz6+
>>289
それにはちょっと異論があるんだけれども、今回は僕が折れましょう
僕と仲直りしますか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況