Ing*_*goB 10 c# unit-testing xunit .net-core
有人知道如何将 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);
}
Run Code Online (Sandbox Code Playgroud)
如果我使用枚举的 int 值而不是枚举值,则测试工作并运行。
你不需要[MemberData],enum值应该是开箱即用的。根据文档 enums 是常量:
An enum type is a distinct value type (Value types) that declares a set of named constants.
下面的代码示例适用于我(.net core 3.0 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);
}
}
Run Code Online (Sandbox Code Playgroud)
一定有别的东西给你带来了麻烦。
需要常量表达式的属性[InlineData],例如 int、bool、string 等。
[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 };
}
Run Code Online (Sandbox Code Playgroud)
参考xUnit 理论:使用 InlineData、MemberData、ClassData
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |