我正在学习并尝试使用单元测试来完成我的项目.但是当我尝试使用单元测试编写演示时,我看到控制器的单元测试与服务层相同.下面是我为控制器和服务层编写的单元测试代码
控制器测试:
private Mock<ICountryService> _countryServiceMock; CountryController objController; List<Country> listCountry; [Testinitialize] public void Initialize() { _countryServiceMock = new Mock<ICountryService>(); objController = new CountryController(_countryServiceMock.Object); listCountry = new List<Country>() { new Country() { Id = 1,Name = "US" },new Country() { Id = 2,Name = "India" },new Country() { Id = 3,Name = "Russia" } }; } [TestMethod] public void Country_Get_All() { //Arrange _countryServiceMock.Setup(x => x.GetAll()).Returns(listCountry); //Act var result = ((objController.Index() as ViewResult).Model) as List<Country>; //Assert Assert.AreEqual(result.Count,3); Assert.AreEqual("US",result[0].Name); Assert.AreEqual("India",result[1].Name); Assert.AreEqual("Russia",result[2].Name); }
服务测试:
private Mock<ICountryRepository> _mockRepository; private ICountryService _service; Mock<IUnitOfWork> _mockUnitWork; List<Country> listCountry; [Testinitialize] public void Initialize() { _mockRepository = new Mock<ICountryRepository>(); _mockUnitWork = new Mock<IUnitOfWork>(); _service = new CountryService(_mockUnitWork.Object,_mockRepository.Object); listCountry = new List<Country>() { new Country() { Id = 1,Name = "Russia" } }; } [TestMethod] public void Country_Get_All() { //Arrange _mockRepository.Setup(x => x.GetAll()).Returns(listCountry); //Act List<Country> results = _service.GetAll() as List<Country>; //Assert Assert.IsNotNull(results); Assert.AreEqual(3,results.Count); }
解决方法
在控制器级别,我倾向于编写端到端测试.没有嘲笑,没有假货,只有真实的东西.
原因是在上面的测试中,您的单元测试与控制器操作的实现细节相关联.假设您不再使用存储库或工作单元,您的测试将不再编译.在这个级别,您应该关注测试行为,而不是实现.
我单元测试隔离域模型,其余的集成测试.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。