Visual Studio に組み込まれている C# の単体テスト機能を使用して単体テストを行いたいさまざまな方法があります。物事はかなり順調に進んでいますが、特定の関数呼び出しへの依存関係を「スタブアウト」したいシナリオに遭遇しました。
つまり、次の形式のメソッドがいくつかあります。
public class ClassWithMethodsIWantToUnitTest
{
public void myFcn(object someArg)
{
...
LoggerService.Instance.LogMessage("myMessage");
...
}
}
基本的に、単体テストで「LogMessage」の呼び出しが発生したことを確認するだけです。実際にログファイルなどをチェックしたくありません。LoggerService 行がヒットして実行されたかどうかを確認する方法が必要です。
LoggerService はシングルトンです。可能であれば、単体テストのためだけにコードを変更したくありません。
この問題の形式に基づいて、ユニット テストで何らかの方法でコードを制御できるように思われます。つまり、単体テストに使用できるように、LogMessage の偽バージョンを作成する方法はありますか? 可能であれば、「実際の」LogMessage関数を呼び出したくありません。コードが関数を呼び出したパスにヒットしたことをテストしたいだけです。
これは意味がありますか?これは可能ですか?