【问题标题】:Should I unit test a simple update app service?我应该对一个简单的更新应用服务进行单元测试吗?
【发布时间】:2014-03-10 17:06:24
【问题描述】:

我应该对如下所示的简单应用服务进行单元测试吗?

public void Update(UserAccountViewModel viewModel)
    {
        var instance = Mapper.Map<UserAccountViewModel, UserAccount>(viewModel);
        _userAccountService.UpdateInstance(instance);
    }

如您所见,它只是接收一个视图模型,使用 AutoMapper 将其映射到域模型并调用域服务方法来更新对象。如果我应该对它进行单元测试,我正在努力查看单元测试的内容!这也许回答了我自己的问题,因为您可能会争辩说,除了 AutoMapper 的工作之外,没有什么可以真正测试,我认为我不应该因为其他人的工作而进行单元测试,对吗?

编辑: 感谢您的回复。我已经使用了类似这样的东西,它只是测试 UpdateInstance 方法被调用一次:

[TestMethod]
public void GivenViewModelWhenEditingAUserThenTheUpdateInstanceDomainServiceMethodIsCalledOnce()
{
    // Arrange
    _userAccounts.Clear();
    var viewModel = new Mock<UserAccountViewModel>();

    // Act
    _userAccountAppService.Update(viewModel.Object);

    // Assert
    _userAccountService.Verify(e => e.UpdateInstance(It.IsAny<UserAccount>()), Times.Once());
}

【问题讨论】:

  • 这绝对是可单元测试的,你可以模拟 _userAccountService 并检查 UpdateInstance 是否被调用并且字段是否准确

标签: c# unit-testing viewmodel onion-architecture


【解决方案1】:

“单元测试什么”是一个非常主观的问题。答案的范围从“什么都没有;这是浪费时间”到“总是 100% 的代码覆盖率”。我赞成务实的单元测试。在这种情况下,Update 方法本身做的很少,以至于 IMO 不值得进行单元测试。您只是在测试 AutoMapper,它的创建者应该已经对其进行了测试。

不过,对真实用户帐户服务的 UpdateInstance 方法进行单元测试很可能很有价值。

【讨论】:

    【解决方案2】:

    这并不是要确保每个类中的每个公共方法都包含一个测试。确保涵盖所有行为更为重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      相关资源
      最近更新 更多