views:

429

answers:

4

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?

+2  A: 

Try the data driven test cases NUnit extension.

dbkk
+1 looks interesting
bendewey
A: 

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))
Gishu
+4  A: 

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).

Ray
Mal Ross
A: 

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.

benPearce