我有方法:
public static int Add(List<int> numbers)
{
if (numbers == null || numbers.Count == 0)
return 0;
if (numbers.Count == 1)
return numbers[0];
throw new NotImplementedException();
}
这是我针对它的测试,但它不喜欢 new List<int> {1}
在测试用例中:
[TestCase(new List<int>{1}, 1)]
public void Add_WithOneNumber_ReturnsNumber(List<int> numbers)
{
var result = CalculatorLibrary.CalculatorFunctions.Add(numbers);
Assert.AreEqual(1, result);
}
它给我错误:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
我必须这样做吗:
[Test]
public void Add_WithOneNumber_ReturnsNumber()
{
var result = CalculatorLibrary.CalculatorFunctions.Add(new List<int>{7});
Assert.AreEqual(7, result);
var result2 = CalculatorLibrary.CalculatorFunctions.Add(new List<int> {3});
Assert.AreEqual(4,result2);
}
最佳答案
有一个选项可以使用 TestCaseSource 属性。在这里,我提供了一个非断言测试,有两种情况,只是为了看看它是如何工作的:
[TestFixture]
public class TestClass
{
private static readonly object[] _sourceLists =
{
new object[] {new List<int> {1}}, //case 1
new object[] {new List<int> {1, 2}} //case 2
};
[TestCaseSource("_sourceLists")]
public void Test(List<int> list)
{
foreach (var item in list)
Console.WriteLine(item);
}
}
无论如何,我不得不提到这不是最明显的解决方案,我更喜欢组织整齐的固定装置,而忽略了它们更冗长的事实
更多信息: https://github.com/nunit/docs/wiki/TestCaseSource-Attribute
关于c# - 如何将 new List<int> {1} 放入 NUNIT 测试用例中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479817/