完全なコード カバレッジを持ち、DI を使用してすべての作業を行うメイン クラス関数 (Job.Run) のすべてのロジックをモック アウトするクラス API があります。
データ入力フィールドの 1 つでいくつかの検証を行っていないという生産上のバグを見つけました。
そこで、ValidateFoo() というスタブ関数を追加しました... この関数に対して単体テストを作成して、JobFailedException を期待し、テストを実行しました。その関数が空だったため、明らかに失敗しました。検証ロジックを追加したところ、テストに合格しました。
これで、検証が機能することがわかりました。問題は、ValidateFoo() が Job.Run() 内で実際に呼び出されることを確認するテストをどのように作成するかです。ValidateFoo() は Job クラスのプライベート メソッドであるため、インターフェイスではありません...
NMock2.0でこれを行う方法はありますか? TypeMock が非インターフェース型の偽物をサポートしていることは知っています。しかし、モック ライブラリを今すぐ変更することはできません。この時点で NMock がサポートできない場合は、単に ValidateFoo() 呼び出しを Run() メソッドに追加して手動でテストするだけです。現在、100% のカバレッジ。何かアドバイス?どうもありがとうございました。
編集: 私が念頭に置いているもう 1 つのオプションは、Job.Run 機能の統合テストを作成することです (モックの代わりに複合オブジェクトの真の実装を注入します)。そのフィールドに不適切な入力値を与えてから、ジョブが失敗したことを検証します。これは機能し、私のテストをカバーします - しかし、それは実際には単体テストではなく、機能の 1 つの単位をテストする統合テストです....うーん..
EDIT2:これを行う方法はありますか?誰にもアイデアがありますか?多分 TypeMock - またはより良いデザインですか?