1

私は部分的に完成したMVC Webプロジェクトと私の仕事に取り組み始めました - 単体テストでコードをカバーすることです。プロジェクトには、DB ストレージと、CRUD 操作を含む非静的リポジトリ クラスがあります。これらの CRUD 操作をテストするには、FakeRepository で実際の Repository クラスをモックする必要があるため、IRepository を作成し、IoC を使用して注入しました...

しかし、問題は、プロジェクトには、基本的な CRUD 操作を拡張する多くの静的メソッド (ヘルパー) を持つ多くの静的クラスもあり、アプリ内のすべてのコントローラーはこれらの静的ヘルパーと連携して内部的にリポジトリ クラスを作成することです...

コントローラーから IRepository を渡すようにすべての静的メソッドを変更しようとしましたが、他の静的ヘルパーなどに基づくヘルパーが多すぎます...うまくいきません! この混乱をすべて書き直す時間はありません...

したがって、これらすべてのヘルパーをテストするにはどうすればよいか、アドバイスが必要ですが、偽の IRepository インスタンスを使用しますか?

4

1 に答える 1

0

s Shim (Microsoft Fakes から) を作成して、静的メソッドの動作をオーバーライドできます

コードは次のようになります。

[TestClass]
public class TestClass1
{ 
        [TestMethod]
        public void TestCurrentYear()
        {
            int fixedYear = 2000;

            // Shims can be used only in a ShimsContext:
            using (ShimsContext.Create())
            {
              // Arrange:
                // Shim DateTime.Now to return a fixed date:
                System.Fakes.ShimDateTime.NowGet = 
                () =>
                { return new DateTime(fixedYear, 1, 1); };

                // Instantiate the component under test:
                var componentUnderTest = new MyComponent();

              // Act:
                int year = componentUnderTest.GetTheCurrentYear();

              // Assert: 
                // This will always be true if the component is working:
                Assert.AreEqual(fixedYear, year);
            }
        }
}
于 2013-03-04T12:00:17.630 に答える