xaisoft xaisoft - 11 months ago 87
C# Question

How do I put new List<int> {1} in an NUNIT TestCase?

I have the method:

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();

Here is my test against it, but it does not like
new List<int> {1}
in the TestCase:

[TestCase(new List<int>{1}, 1)]
public void Add_WithOneNumber_ReturnsNumber(List<int> numbers)

var result = CalculatorLibrary.CalculatorFunctions.Add(numbers);

Assert.AreEqual(1, result);

It gives me the error:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

Do I have to do it like this:

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});


Answer Source

There is one option to use TestCaseSource attribute. Here I provide a non-assert test with two cases just to see how it works:

public class TestClass
    private object[] _sourceLists = {new object[] {new List<int> {1}},  //case 1
                                     new object[] {new List<int> {1, 2}} //case 2

    [Test, TestCaseSource("_sourceLists")]
    public void Test(List<int> list)
        foreach (var item in list)

Anyhow I have to mention it is not the most evident solution and I would prefer neatly organized fixtures ignoring the fact they are more verbose