NUnit parameterized tests with datetime

I'd probably use something like the ValueSource attribute to do this:

public class TestData
{
    public DateTime StartDate{ get; set; }
    public bool ExpectedResult{ get; set; }
}

private static TestData[] _testData = new[]{
    new TestData(){StartDate= new DateTime(2010, 7, 8), ExpectedResult= true}};

[Test]
public void TestMethod([ValueSource("_testData")]TestData testData)
{
}

This will run the TestMethod for each entry in the _testData collection.


You can specify the date as a constant string in the TestCase attribute and then specify the type as DateTime in the method signature.

NUnit will automatically do a DateTime.Parse() on the string passed in.

Example:

[TestCase("01/20/2012")]
[TestCase("2012-1-20")] // Same case as above in ISO 8601 format
public void TestDate(DateTime dt)
{
    Assert.That(dt, Is.EqualTo(new DateTime(2012, 01, 20)));
}

Another alternative is to use a more verbose approach. Especially if I don't necessarily know up front, what kind of DateTime() (if any...) a given string input yields.

[TestCase(2015, 2, 23)]
[TestCase(2015, 12, 3)]
public void ShouldCheckSomething(int year, int month, int day)
{
    var theDate = new DateTime(year,month,day);
    ....
} 

...note TestCase supports max 3 params so if you need more, consider something like:

private readonly object[] testCaseInput =
{
    new object[] { 2000, 1, 1, true, "first", true },
    new object[] { 2000, 1, 1, false, "second", false }
}

[Test, TestCaseSource("testCaseInput")]
public void Should_check_stuff(int y, int m, int d, bool condition, string theString, bool result)
{
....
}