簡體   English   中英

如何為Web API控制器編寫UnitTest

[英]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方法。

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

使用任何模擬框架為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM