【问题标题】:.NET Core 2.2: xUnit Theory Inlinedata not working with enum values.NET Core 2.2:xUnit Theory Inlinedata 不适用于枚举值
【发布时间】:2019-05-25 16:54:14
【问题描述】:

有人知道如何将 xUnit 与“Theory”和“InlineData”与enum 值一起使用吗?这导致测试不被识别为测试并且不运行:

[Theory]
[InlineData("12h", 12, PeriodUnit.Hour)]
[InlineData("3d", 3, PeriodUnit.Day)]
[InlineData("1m", 1, PeriodUnit.Month)]
public void ShouldParsePeriod(string periodString, int value, PeriodUnit periodUnit)
{
    var period = Period.Parse(periodString);
    period.Value.Should().Be(value);
    period.PeriodUnit.Should().Be(periodUnit);
}

如果我使用枚举的 int 值而不是枚举值,则测试工作并运行。

【问题讨论】:

    标签: c# unit-testing .net-core xunit


    【解决方案1】:

    您不需要[MemberData]enum 值应该开箱即用。根据documentationenums 常量:

    An enum type is a distinct value type (Value types) that declares a set of named constants.

    下面的代码示例适用于我(.net core 3.1 xUnit 测试项目 模板):

    public class UnitTest1
    {
        public enum Foo { Bar, Baz, Qux }
    
        [Theory]
        [InlineData(Foo.Bar, Foo.Baz)]
        public void Test1(Foo left, Foo right)
        {
            Assert.NotEqual(left, right);
        }
    }
    

    一定是有别的东西给你带来了麻烦。

    【讨论】:

    • 既然您接受了这个答案,请您详细说明真正的问题是什么?这真的让我很感兴趣:)
    • @MikeLimaSierra:迈克,我真的很抱歉,我刚刚看到你的评论,老实说,我不记得当时这个答案对我有什么帮助。我刚刚看到测试运行良好,截至今天,使用“InlineData”和枚举。干杯,英戈
    【解决方案2】:

    [InlineData] 的属性需要常量表达式,例如 int、bool、string 等。

    如果内联没有将 enum 识别为常量,请改用 [MemberData]

    [Theory]
    [MemberData(nameof(PeriodData))]
    public void ShouldParsePeriod(string periodString, int value, PeriodUnit periodUnit) {
        var period = Period.Parse(periodString);
        period.Value.Should().Be(value);
        period.PeriodUnit.Should().Be(periodUnit);
    }
    
    
    public static IEnumerable<object[]> PeriodData() {
        yield return new object[] { "12h", 12, PeriodUnit.Hour };
        yield return new object[] { "3d", 3, PeriodUnit.Day };
        yield return new object[] { "1m", 1, PeriodUnit.Month };
    }
    

    参考xUnit Theory: Working With InlineData, MemberData, ClassData

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2022-01-10
      相关资源
      最近更新 更多