2

これはできますか?これが私がテストしている方法です:

public void SaveAvatarToFileSystem()
{
  Directory.CreateDirectory(AvatarDirectory);
  _file.SaveAs(FormattedFileName);
}

単体テストでは、Rhino.Mocksを使用しており、_file.SaveAs()が呼び出されたことを確認したいと思います。_file(HttpPostedFileBaseオブジェクト)をモックアウトして、このメソッドのクラスコンストラクターに挿入しました。この単体テストを実行したいのですが、実際にはDirectory.CreateDirectory呼び出しを実行しません。これは可能ですか?

4

3 に答える 3

3

RhinoMocksを使用して静的メソッドをモックすることはできません

ただし、これを行うことは可能です。MicrosoftMolesTypeMockにはこの機能があります。

Molesを使ってみましたが、問題なく動作します。模擬アセンブリが生成され、実行時に静的メソッドをデリゲートに置き換えることができます。

于 2010-11-03T18:57:05.103 に答える
2

RhinoMocksを使用して静的メソッドをモックすることはできません。私がすることは、クラスの「保護された内部仮想」メソッドで静的メソッドを分離することです。次に、「テスト対象クラス」をモックし、「CreateAvatarDirectory」メソッドをモックすることができます。次に、「SaveAvatarToFileSystem」メソッドを呼び出し、コードがモックされた「CreateAvatarDirectory」メソッドを呼び出したことを確認します。

これは非常に便利なトリックであり、テスト対象のクラスのメソッドを分離して、同じクラスの他のメソッドによって呼び出されたことを表明できます。お役に立てば幸いです。

public void SaveAvatarToFileSystem()
{
    CreateAvatarDirectory();
    _file.SaveAs(FormattedFileName);
}

protected internal virtual void CreateAvatarDirectory()
{
    Directory.CreateDirectory(AvatarDirectory);
}
于 2010-11-03T20:44:54.877 に答える
0

静的クラスの既存のラッパーを作成または使用できます(上記の場合は、System.IO.Abstractionsが役立つ可能性があります)。

于 2010-11-04T09:51:57.740 に答える