多態性を用いる際、意図通りのインスタンスができているかどうかを確認するための単体テストはどのようにすればよいでしょうか?
例えば、IAを継承するA1、A2、A3クラスがあって、IAを持つクラスBがあった場合、
クラスBのIA型のプロパティのインスタンスがA1なのかA2なのかA3なのかを判別したいけれど、
多態性によってそれらが外部から基本的に区別がつかない状態になっています。
もちろん、それぞれを区別できるような動作を敢えて行えばわかるのですが、
例えば、テスト用にインスタンスの型を識別できるようなプロパティを作ったり、
もしくは、リフレクションを使って識別したりするのは邪道でしょうか?
因みに、A1、A2、A3は個別に単体テストを行なっています。
あくまでも、その生成パターンが意図通りかというテストを行なうことのみを目的としたいです。
> クラスBのIA型のプロパティのインスタンスがA1なのかA2なのかA3なのかを判別したいけれど
なぜ判別したいのですか?
パターン先の動作(A1、A2、A3)は個別にテストを終えているので、
次はそのパターン分岐のテストをしたいと思っています。
> 次はそのパターン分岐のテストをしたいと思っています。
そのテストがなぜ必要なのでしょうか?「どれを返しても構わない」から総称の型を使う、というのがポリモーフィズムなのではないでしょうか。
どの状態でも、どれを返しても構わないわけではありません。
それぞれの条件下で、異なるインスタンスを返す必要があるけれども、
外部から見たときにそれらを区別する必要がないのが多態性の役割だと思います。
たまたま問題ないパターンがあるだけで、すべてにおいてそれが言えるとは思えません。
例えば、本番の環境での動作中にテスト用のMockインスタンスが渡ると困ると思います。
外部から見れば区別はつかないですが、内部では処理が異なります。
意図通りの状態で、意図通りのインスタンスを返さないと意図通りに処理できません。
もちろん、この前提が間違っていれば、そもそも私のテストそのものに意味はないのですが…。
> 例えば、本番の環境での動作中にテスト用のMockインスタンスが渡ると困ると思います。
それはポリモーフィズムとは別問題かと思います。
例えの話です。
別にMockでなくとも、意図していないインスタンスが渡ると問題ではないですか?

回答2件
あなたの回答
tips
プレビュー