private functionのtest
private methodのtest_
このページでは基本的にprivate functionのtestをするときのことについて書く(書きたい)mrsekut.icon
しない場合: public functionのみtestすべきという主張
前提
以下の2つを区別してtestを書く
white-box test
tests/のようなdirを作ってその中に書く
実装の詳細をtestしない
publicなもののみtestする
privateなものはtestしない
black-box test
private functionのtestをする
いくつかの方法
In-source testing
package privateを使う
公開範囲をpackage内に制限すれば良い
OCamlにはppx_inline_testという機構があるらしい
Goは同一module内にあれば、fileが異なっていてもprivate methodを呼び出せる
(ここでいう「module」は、Goの用語では「pacakage」)
Goはmodule/packageの用語の使い方が逆になっている
hoge.goに対して、hoge_test.goにするなどの命名規則がある
goでprivateメソッドをテストする - emahiro/b.log
(Goは関数名の頭文字が大文字だとpublicになる)
Erlangのmeck
参考
ユニットテストのための言語設計 - gfnweb
#WIP
https://www.agent-grow.com/self20percent/2018/05/09/phpunit_testing_private_and_protected_methods/
すごいmrsekut.icon
PHPなのにDXが良い
PHPのReflectionを使う
https://twitter.com/tnacigam/status/1695071115024941535
https://jesseduffield.com/Testing-Private-Methods/
private methodのtestに関しては2022年になっても結論が出ていない
様々な論者の主張
そもそもprivate methodを一切使用しない
これは論外mrsekut.icon
全てのprivate methodをtestする
private methodはtestしない
ものによってtestしたりしなかったりする
private methodをまとめて別classに分ける
private methodをtestしたくなるということは、そのclassが大きすぎるということを疑う
使用している言語のmoduleのサポートがしょぼいせいで選択肢が失せるのは問題mrsekut.icon
TypeScriptとかだと、どうしてもpublicにしないとtestできない
だから泣く泣く、以下のいずれかの選択を迫られる
privateなものはtestしない
testのためだけにpublicにする
この辺の議論と、「private なものをtestするべきかどうか」はごっちゃにすべきでないと思う
https://speakerdeck.com/asumikam/private-methods-test
いまいち読む気がしない