How do I put new List<int> {1} in an NUNIT TestCase?
There is one option to use TestCaseSource attribute. Here I provide a non-assert test with two cases just to see how it works:
[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);
}
}
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
More information: https://github.com/nunit/docs/wiki/TestCaseSource-Attribute
My solution is simpler, I just use params
. I hope this works for you!
[TestCase(1, 1)]
[TestCase(10, 5, 1, 4)]
[TestCase(25, 3, 5, 5, 12)]
public void Linq_Add_ShouldSumAllTheNumbers(int expected, params int[] numbers)
{
var result = CalculatorLibrary.CalculatorFunctions.Add(numbers);
Assert.AreEqual(expected, result);
}
I often use strings and parsing as it renders nicely in the testrunner. Sample:
[TestCase("1, 2")]
[TestCase("1, 2, 3")]
public void WithStrings(string listString)
{
var list = listString.Split(',')
.Select(int.Parse)
.ToList();
...
}
Looks like this in Resharper's runner: