I am creating an application that will manage multiple instances of an external utility, supplying each with data and fetching results.
But as I am writing unit tests for the class I came upon a problem.
How do test that the target method actually starts a process (set via a property) when called?
I have tried:
- Make the class execute an external process and then use GetProcessesByName to check if it has started.
- Use output redirection, e.g. using the greater-than sign to echo something to a file and test its existence
I feel like emitting code and/or creating yet another exe to test is overkill.
This is the exact method:
public void Start()
{
if (!_isRunning) {
var startInfo = new ProcessStartInfo() {
CreateNoWindow = true,
UseShellExecute = true,
FileName = _cmdLine,
Arguments = _args
};
_process = Process.Start(startInfo);
_isRunning = true;
} else {
throw new InvalidOperationException("Process already started");
}
}
I want to unit-test it so that if nothing is running (_isRunning == false), a new process should be spawned.
I feel stumped, is there an elegant way to unit-test that an external process actually starts?