Мне понравилась идея ДжаредПара , но я не хотел передавать Console.Out
и Console.Error
каждому методу вывода помощника, который у меня был. Однако мой вывод проходит через один класс, поэтому я просто установил в нем пару статических полей:
internal static TextWriter _stdOut = Console.Out;
internal static TextWriter _stdErr = Console.Error;
Я обновил свои методы вывода в классе обработчика вывода, чтобы использовать эти поля. Затем я обновил AssemblyInfo.cs этого проекта, добавив в него:
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("MyTestProject")]
Таким образом, я могу переопределить _stdOut
и _stdErr
в моих тестовых методах, вызвать мой тестируемый метод (который использует мой класс обработки вывода) и подтвердить ожидаемый вывод.
OutputHandler._stdOut = new StringWriter();
MySnazzyMethod("input", 1, 'c');
OutputHandler._stdOut.Flush();
string expected = "expected output";
string stdout = OutputHandler._stdOut.ToString().Trim(new[] { '\r', '\n' });
Assert.IsFalse(string.IsNullOrEmpty(stdout));
Assert.AreEqual(expected, stdout);