public async Task RestartProcessThatTerminatesAfterFileChange() { var testAsset = _testAssetsManager.CopyTestAsset(AppName) .WithSource() .Path; using var app = new WatchableApp(testAsset, _output); await app.StartWatcherAsync(); var processIdentifier = await app.GetProcessIdentifier(); await app.HasExited(); // process should exit after run await app.IsWaitingForFileChange(); var fileToChange = Path.Combine(app.SourceDirectory, "Program.cs"); try { File.SetLastWriteTime(fileToChange, DateTime.Now); await app.HasRestarted(); } catch { // retry File.SetLastWriteTime(fileToChange, DateTime.Now); await app.HasRestarted(); } var processIdentifier2 = await app.GetProcessIdentifier(); Assert.NotEqual(processIdentifier, processIdentifier2); await app.HasExited(); // process should exit after run }