1

我开始处理部分完成的 MVC 网络项目和我现在的任务——通过单元测试来覆盖代码。项目具有数据库存储和包含 CRUD 操作的非静态存储库类。为了测试这些 CRUD 操作,我需要使用 FakeRepository 模拟真实的 Repository 类,所以我创建了 IRepository 并使用 IoC 注入它......

但问题是该项目还有很多静态类,其中包含很多静态方法(Helper),它们扩展了基本的 CRUD 操作,并且应用程序中的所有控制器都与这些静态助手一起工作,这些静态助手在内部创建了 Repository 类......

试图修改所有静态方法以从控制器传递 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 回答