作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 github 上探索 JohnPapa 的 CodeCamper 项目 https://github.com/johnpapa/CodeCamper .这是一个 ASP.Net SPA 应用程序,我也在从事类似的项目。
我有兴趣为 WebAPI Controller 编写一些单元测试。 Controller 承包商需要 UnitofWork 实例,UnitofWork 在 Application_Start 方法中启动。
当我运行我的 UnitTest 项目时,UnitofWork 对象为空。我如何从 UnitTest 项目启动 UnitofWork 以便我可以运行我的测试方法。我希望自己说清楚。
这里是以下 Controller 的单元测试方法示例。
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 存储库。 https://github.com/johnpapa/CodeCamper
最佳答案
使用任何模拟框架为 ICodeCamperUow
创建一个假/ stub /模拟(下面我使用 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这是一本学习单元测试的好书。
关于c# - 如何为 Web API Controller 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897370/
我是一名优秀的程序员,十分优秀!