NUnit cannot recognise a TestCase when it contains an array
Following on from this bug at JetBrains it looks as though the solution here is to use the TestName
attribute on your different cases:
[Test]
[TestCase( 1, 2, new long[] { 100, 200 }, TestName="Test 1" )]
[TestCase( 5, 3, new long[] { 300, 500 }, TestName="Test 2" )]
public void MyClass_MyOtherMethod( long a, long b, long[] bunchOfNumbers )
{
Assert.IsTrue( a < b );
}
Everything now shows correctly in ReSharper if one of my tests fails.
For an array that contains strings, use an object
array with the TestCase
attributes along with params
:
[Test]
[TestCase(new object[] {"foo", "bar", "baz"})]
[TestCase(new object[] {"300", "500", "700"})]
public void MyClass_SomeOtherMethod(params string[] bunchOfStrings)
{
// assert something...
}
An alternative is to use a string for the array:
[TestCase( 1, 2, "100, 200")]
[TestCase( 5, 3, "300, 500")]
public void MyClass_MyOtherMethod(long a, long b, string bunchOfNumbersString)
{
var bunchOfNumbers= bunchOfNumbersString.Split(',')
.Select(long.Parse)
.ToArray();
...
}
The upside with this approach is that it will render nicly in the testrunner.
Side note: The [Test]
is not needed when using [TestCase]
or at least I don't see that it solves a problem.
This works in VS 2017 with NUnit 3.11.0
[TestCase(new long[] {5, 6, 942135153})]
public void DummyTest(long[] values)
{
Assert.That(values != null);
}