Ray
Ray

Reputation: 46555

Dynamically create tests in NUnit

Using Nunit, I want to be able to write a test fixture that will read all the filenames in a particular directory and create a test for each file.

I could quite easily write one test method that scans through the directory and just does all the tests, but when I run NUnit I want to be able to see each of the tests individually.

Is this even possible?

Upvotes: 41

Views: 12253

Answers (4)

benPearce
benPearce

Reputation: 38333

I know this is a little obscure but I have used a script in the past to generate code for me which I can then execute as individual test cases.

Upvotes: 0

Ray
Ray

Reputation: 46555

I've found a way that fits my purposes

Have one test case, and mark it with the TestCaseSource attribute like so

[Test, TestCaseSource("GetTestCases")]
public void TestFile(string filename)
{
    //do test
}

Then write the GetTestCases to read all the file names in the directory

private static string[] GetTestCases()
{
    return GetAllFilesInCurrentDirectory();
}

Then when I start NUnit I get a list of the tests to be run (listed under TestFile).

Upvotes: 68

Gishu
Gishu

Reputation: 136593

If you are not going to be adding files to that directory over time and have a set of filenames to pass in as an input to a generic test, try using the RowTest NUnit extension (part of the std distrib post v2.4.7) - You'd be able to see each test case - input combination individually in the GUI grouped under a single node.

If you are going to be adding files to that directory, I'd write a single NUnit TestCase that loops over a list of files obtained at runtime and calls the generic test method with each filepath. Use a collecting parameter to collect failing test file names - at the end you assert. You wouldn't be able to see each test case individually but you'd have readable simple test code.

Assert.AreEqual(listOfFailedFiles.Length, 0, PrettyPrint(listOfFailedFiles))

Upvotes: 1

dbkk
dbkk

Reputation: 12842

Try the data driven test cases NUnit extension.

Upvotes: 3

Related Questions