3

我正在 github https://github.com/johnpapa/CodeCamper上探索 JohnPapa 的 CodeCamper 项目。这是一个 ASP.Net SPA 应用程序,我也在从事类似的项目。

我有兴趣为 WebAPI 控制器编写一些单元测试。控制器承包商需要 UnitofWork 实例,并且 UnitofWork 在 Application_Start 方法中启动。

当我运行我的 UnitTest 项目时,UnitofWork 对象为空。我如何从 UnitTest 项目启动 UnitofWork 以便我可以运行我的测试方法。我希望自己清楚。

这是以下控制器的示例 UnitTest 方法。

查找控制器.cs

用户控制器测试.cs

    [TestClass]
    public class UserControllerTest : ApiBaseController
    {
        [TestMethod]
        public void GetRoomsTest()
        {
            var controller = new LookupsController(Uow);
            var result = controller. GetRooms().Any();
            Assert.IsTrue(result);
        }
    }

再次为什么Uow为空?我应该怎么做,这样我才能为这种类型的项目/架构编写单元测试方法。

有关代码的更多详细信息,您可以查看 github repo。https://github.com/johnpapa/CodeCamper

4

1 回答 1

3

使用任何模拟框架为ICodeCamperUow(下面我使用NSubstitute)创建一个假/存根/模拟:

[TestMethod]
public void GetRoomsTest()
{
  // UOW we need to use
  var fakeUOW = Substitute.For<ICodeCamperUow>();

  // setting up room repository so that it returns a collection of one room
  var fakeRooms = Substitute.For<IRepository<Room>>();
  var fakeRoomsQueryable = new[]{new Room()}.AsQueryable();
  fakeRooms.GetAll<Room>().Returns(fakeRoomsQueryable);

  // connect UOW with room repository
  fakeUOW.Rooms.Returns(fakeRooms);

  var controller = new LookupsController(fakeUOW);
  var result = controller.GetRooms().Any();
  Assert.IsTrue(result);
}

请考虑阅读《单元测试的艺术》,这是一本学习单元测试的好书。

于 2013-09-19T14:52:30.380 回答