Often when developing something, I have the need to check how a function or library works. For example, I always have to check for this question:

Does Directory.ListFiles(".\\temp\\") return a list of filenames, a list of relative filepaths, or a list of rooted filepaths?

It returns relative filepaths by the way:

Directory.ListFiles(".\\temp\\");
[ ".\temp\NuCrunch.Tests.csproj", ".\temp\packages.config", ".\temp\Scratchpad.cs" ]

Now that there is a C# Interactive window in Visual Studio, you can use that to test the output. Sometimes however the C# Interactive window is not suitable:

  • You want to test needs a little more setup than a couple of lines
  • You wish to use the debugger to check on intermediate state
  • You are not in Visual Studio (I am 99% of the time in Rider)

When this happens, I turn to the unit test file which I add to all unit test projects: the Scratchpad.cs.

The complete listing of the file is this:

using Xunit;
using Xunit.Abstractions;

namespace NuCrunch.Tests
{
	public class Scratchpad
	{
		private readonly ITestOutputHelper _output;

		public Scratchpad(ITestOutputHelper output)
		{
			_output = output;
		}

		[Fact]
		public void When_testing_something()
		{

		}
	}
}

It gets committed to the git repository with no content in the When_testing_something method, and is never committed again afterwards. The _output field is added to allow writing to console/test window easily too.

Now whenever I wish to experiment with something, I can pop open the Scratchpad write some test content, then execute and debug it to my hearts content.

After I am done with the test code, one of two things happen: it gets deleted, or it gets moved into a proper unit test.