private static async Task AssertMessage( string inputMessage, string expectedMessage, string inputSender, string expectedSender) { expectedMessage = expectedMessage ?? inputMessage; expectedSender = expectedSender ?? inputSender; Stream newStream = null; try { var stream = new MemoryStream(Encoding.ASCII.GetBytes( inputMessage)); var headers = await MailUtilities.ParseHeadersAsync(stream); string newSender; (newStream, newSender) = await MailDispatcher.ReplaceSenderAsync(headers, stream, inputSender, CancellationToken.None); if (inputMessage == expectedMessage && inputSender == expectedSender) { Assert.Same(stream, newStream); } else { Assert.NotSame(stream, newStream); Assert.Throws <ObjectDisposedException>(() => stream.ReadByte()); } Assert.Equal(0, newStream.Position); Assert.Equal(expectedSender, newSender); using (var reader = new StreamReader(newStream, Encoding.ASCII, false, 1024, true)) { Assert.Equal(expectedMessage, await reader.ReadToEndAsync()); } } finally { newStream.Dispose(); } }