gpt4 book ai didi

c# - NUnit 理论有一个异常(exception)

转载 作者:行者123 更新时间:2023-11-28 20:24:11 26 4
gpt4 key购买 nike

这是我正在寻找的设计/模式。

我有一个 nunit 测试,我计划在其中使用现有枚举作为理论。现有枚举有近 30 个成员。

比如说:

enum ABigEnum
{
A,
B,
C,
D
}


[Theory]
public void Test(ABigEnum enumValue)
{
//generate someValue based upon enumValue
Assert.That(someValue, Is.True, "an amazing assertion message");
}

但是,测试应该断言,枚举中的 D 值表示 False,所有其他值表示 True。我们可以在不使用 if-else 条件的情况下做到这一点吗(作为一个神圣的教义,我避免在测试中使用条件)?或者你们有什么有趣的模式吗?

最佳答案

我喜欢使用 TestCaseSource编写此类测试时由 NUnit 提供的属性。我相信这些测试被称为数据驱动测试。

这是我的测试版本的样子:

public class TestClass
{
public enum ABigEnum
{
A,
B,
C,
D
}

public IEnumerable TestValues
{
get
{
yield return new TestCaseData(ABigEnum.A, false).SetName("Assert A");
yield return new TestCaseData(ABigEnum.B, false).SetName("Assert B");
yield return new TestCaseData(ABigEnum.C, false).SetName("Assert C");
yield return new TestCaseData(ABigEnum.D, true).SetName("Assert D");
}
}

[Theory]
[TestCaseSource(typeof(TestClass), "TestValues")]
public void Test(ABigEnum enumValue, bool assertValue)
{
//generate someValue based upon enumValue
Assert.That(enumValue, Is.EqualTo(assertValue), "an amazing assertion message");
}

}

编辑 1

实际上,您可以将Datapoint 属性与Theory 一起使用。像这样:

    public enum ABigEnum
{
A,
B,
C,
D
}

[Datapoint]
public Tuple<ABigEnum, bool>[] TestValues = new[]
{
new Tuple<ABigEnum, bool>(ABigEnum.A, false), new Tuple<ABigEnum, bool>(ABigEnum.B, false),
new Tuple<ABigEnum, bool>(ABigEnum.C, false), new Tuple<ABigEnum, bool>(ABigEnum.D, true)
};

[Theory]
public void Test(Tuple<ABigEnum,bool> data)
{
//generate someValue based upon enumValue
Assert.That(data.Item1, Is.EqualTo(data.Item2), "an amazing assertion message");
}

关于c# - NUnit 理论有一个异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18121904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com