NUnit设置标志';d枚举
本文关键字:枚举 设置 标志 NUnit | 更新日期: 2023-09-27 18:22:06
我正试图让Nunit的TestCase与Flag'd Enum:一起工作
[NUnit.Framework.TestCase(Framework.Environments.HD3 | Framework.Environments.BizTalk, "Test","Test")]
public void SimpleTest(Framework.Environments environment, string org, string source)
{
environment = Framework.Environments.BizTalk| Framework.Environments.HI5;
....
测试的第一行是查看该值是否设置正确——它是否有效。但是,TestCase没有设置Enum。它得到的是HD3,而不是HIALUnScured。
我的枚举就是这样创建的:
[Flags]
public enum Environments
{
HD3 = 0,
HD1 = 1 << 0,
HD2 = 1 << 1,
HD4 = 1 << 2,
有没有想过如何让它发挥作用?是的,我可以使用第四个变量,但我有兴趣了解发生了什么。
更新
在进一步的调查中,我发现Nunit可能是问题所在:
[TestCase("test", "test")]
public void test(string a, string b)
{
System.Diagnostics.Debug.Write("===============" + a + b);
}
方法内部:a和b为null。
这很可能与我的NUnit有关,我得挖一点。
更新2看来TestDriven.NET是罪魁祸首。它没有按预期工作。我更新了TestDriven,它运行得很好。
您应该修改您的标志声明,假设HD3
是一个可标记的值。
public enum Environments
{
None = 0,
HD1 = 1 << 0, // 1
HD2 = 1 << 1, // 2
HD3 = 1 << 2, // 4
HD4 = 1 << 3, // 8
// etc.
}
在第一个例子中,假设HD3
为零,Framework.Environments.HD3 | Framework.Environments.BizTalk
相当于只写Framework.Environments.BizTalk
,因为任何与零"或"运算的值都只是其他操作数值。
这里有一个单元测试来证明它如我所描述的那样工作。
[TestFixture]
class EnumFlagsTests
{
[Test]
[TestCase(Environments.HD1 | Environments.HD3)]
public void ShouldBeTrue(Environments input)
{
// arrange
Environments expectedEnum = (Environments.HD1 | Environments.HD3);
int expectedNumericalValue = 5;
// assert
Assert.AreEqual(expectedEnum, input);
Assert.AreEqual(expectedNumericalValue, (int)input);
}
}
[Flags]
public enum Environments
{
None = 0,
HD1 = 1 << 0, // 1
HD2 = 1 << 1, // 2
HD3 = 1 << 2, // 4
HD4 = 1 << 3, // 8
// etc.
}
NUnit绝对不会向测试用例传递null:如果传递了null,NUnit自己的测试就会失败,我们会从人们那里听说的!
我怀疑您可能在使用NUnit自己的运行程序之外的其他东西来执行测试。是这样吗?
TestDriven.NET是罪魁祸首。升级成功了。