, unit test #, NUnit Test - Looping - # , , , , , "" . .
, - , (, , , ), , Process.Start. .NET 4.5 xunit:
[Theory]
[MemberData("YourStaticDataProviderField")]
public async void SomeTest(string initialString, string resultString, params int[] indexes)
{
using (var consoleInStream = new AnonymousPipeServerStream(PipeDirection.Out))
using (var consoleOutStream = new AnonymousPipeServerStream(PipeDirection.In))
using (var writer = new StreamWriter(consoleInStream, Encoding.Default, 1024, true))
using (var reader = new StreamReader(consoleOutStream, Encoding.Default, false, 1024, true))
using (var tokenSource = new CancellationTokenSource())
{
writer.AutoFlush = true;
Task programTask = Task.Run(() =>
{
using (var consoleInReader =
new StreamReader(new AnonymousPipeClientStream(PipeDirection.In,
consoleInStream.GetClientHandleAsString())))
using (var consoleOutWriter =
new StreamWriter(new AnonymousPipeClientStream(PipeDirection.Out,
consoleOutStream.GetClientHandleAsString())))
{
consoleOutWriter.AutoFlush = true;
Console.SetIn(consoleInReader);
Console.SetOut(consoleOutWriter);
Program.Main(new string[0]);
}
}, tokenSource.Token);
await writer.WriteLineAsync(initialString.Length.ToString());
await writer.WriteLineAsync(initialString);
await writer.WriteLineAsync(indexes.Length.ToString());
await writer.WriteLineAsync(String.Join(" ", indexes));
var result = await reader.ReadLineAsync();
await writer.WriteLineAsync();
if (!programTask.Wait(5000, tokenSource.Token))
{
tokenSource.Cancel();
Assert.False(true, "programTask did not complete");
}
Assert.Null(programTask.Exception);
Assert.Equal(resultString, result);
}
}
, , .NET 3.5 , -. AnonymousPipe(Server|Client)Stream
.NET 3.5. unit test
.
System.IO.Pipes.AnonymousPipeServerStream System.IO.Pipes.AnonymousPipeClientStream . , , , MemoryStream , , . Program.Main(string[]) , unit test . AnonymousPipeClientStream , .
programTask, (, xunit, - Assert.ThrowsAsync<ExpectedException>(Func<Task>) ).