Swiftでprivateメソッドのユニットテストをどうするか
こんな話は何年も前から語られてて答えも出てると思うけど、色々な意見を聞いて自分の考えが少しずつまとまってきたので残しておく。
聞いた意見
- publicメソッドをテストすればprivateメソッドのテストも行われていることになる
- リフレクションやモックなど使えばテストできるかもしれないけどテストをされている状態のほうがマシなのでpublicにしてしまうという手もある
- そもそもテストしたいと思うということはそこに重要なロジックが入ってる
- privateなメソッドがテストできないことに悩むのはTDDじゃない証拠
- 変更後の状態をassertできない場合は確認するためのpublicメソッドを作る。例えアプリからは使われていなくてもテストからは利用してるのだから、テストも一つのアプリとして考えれば良い。
なんとなくまとめ
こういう話を聞いてなんとなく、もっとテストのために楽してもいいんだなという気になった。テストのためにメソッド作るとか元も子もないのかとか考えちゃってたけどテストされてないよりは全然いいよなと。 なのでテストのための確認メソッド作ったり、privateメソッドをpublicにすることにあまり抵抗を感じないでやっていこうという考えに至った。