加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 我应该为控制器或服务层或两者编写单元测试吗?

发布时间:2020-12-16 06:38:51 所属栏目:asp.Net 来源:网络整理
导读:我正在学习并尝试使用单元测试来完成我的项目.但是当我尝试使用单元测试编写演示时,我看到控制器的单元测试与服务层相同.下面是我为控制器和服务层编写的单元测试代码 控制器测试: private MockICountryService _countryServiceMock; CountryController obj
我正在学习并尝试使用单元测试来完成我的项目.但是当我尝试使用单元测试编写演示时,我看到控制器的单元测试与服务层相同.下面是我为控制器和服务层编写的单元测试代码

控制器测试:

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);
  }

解决方法

在控制器级别,我倾向于编写端到端测试.没有嘲笑,没有假货,只有真实的东西.

原因是在上面的测试中,您的单元测试与控制器操作的实现细节相关联.假设您不再使用存储库或工作单元,您的测试将不再编译.在这个级别,您应该关注测试行为,而不是实现.

我单元测试隔离域模型,其余的集成测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读