【问题标题】:Unit testing business logic on a service layer在服务层上对业务逻辑进行单元测试
【发布时间】:2016-09-12 12:33:33
【问题描述】:

我是单元测试的新手。 我正在开发一个带有服务层的 MVC 项目,我在其中执行所有业务逻辑和访问数据库(通过存储库模式)

我创建了一个项目来对我的业务逻辑进行单元测试,如下所示:

我要测试的服务层示例逻辑:

public static bool HasPermissionToSomething(MyDomain domain)
{
    if((domain.prop1 == true || domain.prop3 == false) && domain.prop2 == false)
         return true;

    return false;      
}

所以我创建了一个这样的单元测试(使用 XUnit)

[Fact]
public void HasPermissionToSomethingTest()
{
    var domain = MockDomain();

    var hasPermission = MyService.HasPermissionToSomething(domain);

    Assert.Equal(hasPermission, true);
}

这是测试我的服务层的好方法吗?我的测试好不好?

谢谢

【问题讨论】:

    标签: asp.net-mvc unit-testing


    【解决方案1】:

    您正朝着正确的方向前进。您需要稍微增强单元测试,以便它声明更多正在测试的内容。

    [Fact]
    public void HasPermissionToSomethingTest()
    {
        var domain = MockDomain {prop1 = true, prop2 = true, prop3=true};
    
        var hasPermission = MyService.HasPermissionToSomething(domain);
    
        Assert.Equal(hasPermission, true);
    }
    

    而且,您需要更多的单元测试来涵盖触发 true 或 false 返回的各种条件。对于这个测试,Xunit 的理论会有所帮助,这样你就不需要太多的测试了。

    [Theory, InlineData(true, true, true), InlineData(true, true, false)]
        public void ShouldGrantPermission(bool prop1, bool prop2, bool prop3)
        {
            var domain = MockDomain {prop1 = prop1, prop2 = prop2, prop3 = prop3};
    
            var hasPermission = MyService.HasPermissionToSomething(domain);
    
            Assert.Equal(hasPermission, true);
        }
    

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 2011-08-01
      • 2015-01-08
      • 2013-07-27
      • 2010-12-18
      相关资源
      最近更新 更多