0

特定のFuncがメソッドリストで呼び出されることをテストする必要があります。例:

public class ProductController : BaseController
    {
        private readonly Func<IProductRepository> prodRepo;
        public ProductController(Func<IProductRepository> _prodRepo)
       {
            prodRepo = _prodRepo;
       } 
        public ActionResult List(string applicationID)
        {
            var products = prodRepo().GetForApp(applicationID).ToList();
            return PartialView("_List",products);
        }
}

この場合、prodRepo()。GetForApp(applicationID) whaseが呼び出されたことを確認する必要があります。

4

2 に答える 2

0

テストはArrange-Act-Assertスタイルで書くことをお勧めします。詳細については、 Ayende のブログをご覧ください。

アレンジフェーズ

最初の定義MockRepositoryと期待:

var mockRepository = new MockRepository();

var repository = mockRepository.StrictMock<IProductRepository>();

using(mockRepository.Record())
{
    repository.Expect(x => x.GetForApp(Arg<string>.Is.Anything)).Return(new string[0]).Repeat.Once();
}

      var productController = new ProductController((Func<IProductRepository>)(() => repository));

アクトフェイズ

アクションを実行:

productController.List("testApplicationID");

アサートフェーズ

結果を確認します。

repository.VerifyAllExpectations();

インターフェースがありませんIProductRepository

public interface IProductRepository
{
    IEnumerable<string> GetForApp(string applicationID);
}
于 2012-08-08T07:23:26.783 に答える
0

Func が呼び出されたことを本当に確認する必要がありますか? それとも、ProductController が製品を正しく取得することを確認する必要がありますか?

後者の場合は、IProductRepository のモックを設定していくつかの製品を返し、ラムダ経由で渡し、取得した製品が正しいものであることをアサートします。一般に、何かが情報を提供している場合 (act/arrange/assert の「arrange」フェーズ、または given/when/then の「given」) 、 mock ではなくスタブが必要です。

実際にモックを使用して何かが呼び出されたことを確認する必要があるのは、テスト対象のクラスが責任を委任している場合のみです。たとえば、製品をリポジトリに保存する場合です。

また、 Moqもチェックしてください。Moq IMO でスタブを設定する方が少し簡単です。

于 2012-08-08T09:34:28.923 に答える