[英]How write UnitTest for Web API Controller
我在github https://github.com/johnpapa/CodeCamper上探索JohnPapa的CodeCamper項目。 這是一個ASP.Net SPA應用程序,我也在從事類似的項目。
我想為WebAPI控制器編寫一些UnitTests。 控制器承包商要求有UnitofWork實例,並在Application_Start方法中啟動UnitofWork。
當我運行我的UnitTest項目時,UnitofWork對象為null。 如何從UnitTest項目中啟動UnitofWork,以便可以運行測試方法。 我希望自己說清楚。
這是用於以下控制器的樣本UnitTest方法。
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
使用任何模擬框架為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);
}
請考慮閱讀《單元測試的藝術》,這是一本學習單元測試的好書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.