【问题标题】:How write UnitTest for Web API Controller如何为 Web API 控制器编写 UnitTest
【发布时间】:2013-09-19 14:24:32
【问题描述】:

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

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

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

这是一个用于跟随控制器的示例 UnitTest 方法。

LookupsController.cs

UserControllerTest.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

【问题讨论】:

  • 你或许可以使用像 Moq 这样的 Mock 框架为 UoW 接口创建一个新的 mock 实例,并将该 mock 实例传递给控制器​​

标签: c# asp.net-mvc unit-testing asp.net-web-api unit-of-work


【解决方案1】:

使用任何模拟框架为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);
}

请考虑阅读The Art of Unit Testing,这是一本学习单元测试的好书。

【讨论】:

  • 现在我有一个很好的 UnitOfWork 实例,但 Uow.Rooms 始终返回零 (0)。但是当我通过应用程序使用相同的方法时,它会返回给我所有的空间。为什么?
  • @MohsinJK 带有假对象的东西:您可以随意设置它们,但您需要设置它们。只有你知道怎么做。
  • 不完全是我仍然无法在假 Uow 中添加对象。
  • 您要添加什么以及具体在哪里?
  • 在我的项目中,我还有用于添加新对象的 Post 方法。我正在使用该对象在内存中插入一个对象,但我无法添加仍然为空的假 Uow。我不知道如何在内存中添加对象以进行单元测试。
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2017-11-26
  • 1970-01-01
相关资源
最近更新 更多