Нет способа заставить вывод TestContext.WriteLine
перейти в любой файл вообще, потому что он определен как запись в выходной отчет XML, созданный NUnit.То же самое касается Console.WriteLine
, который перехватывается NUnit и также включается в вывод XML.
Чтобы ваши тесты могли записываться в другое место, то есть в специальный файл, вы должны открыть этот файл самостоятельно и записать вЭто.Таким образом, проблема двоякая ...
Как определить, в какой файл писать в SetUp.
Как обеспечить получение каждого тестаэту информацию и записывает в правильный файл.
Оба легко , если параллельно не выполняется ни одного теста , в противном случае это сложнее.
NON-ПАРАЛЛЕЛЬНЫЙ ПОДХОД
TestContext.CurrentContext.Test.Name
дает название текущего теста.Он доступен в SetUp, TearDown и в самом тесте.Когда тесты выполняются последовательно, SetUp, Test и TearDown запускаются один за другим, и между ними ничего нет.Вы можете установить информацию в полях элементов в SetUp и использовать их в тесте и разборе.
Пример: В SetUp создайте имя файла, создайте его и сохраните TextWriter в поле для использованиятесты.В тесте напишите этому писателю.В TearDown закройте его.
Другой пример: В SetUp создайте средство записи строк (или просто StringBuilder) для хранения вывода.В тесте напишите автору (или добавьте к строителю).В TearDown определите имя файла для использования и запишите все.
ПРИМЕЧАНИЕ. Это не будет работать, если тесты выполняются параллельно. Любая информация, сохраненная в экземпляре, можетбыть перезаписан в любое время другим тестом в том же классе.Чтобы использовать этот подход, вы должны пометить весь прибор (или каждый тест) как [NonParallelizable]
.
ПАРАЛЛЕЛЬНЫЙ ПОДХОД
Никакая информация не может быть изменена в экземпляре прибора, еслитесты должны выполняться параллельно.Каждое оператор записи должен определить файл для записи и добавления к нему.Лучший способ сделать это через метод, который делает написание.Следует использовать блокировку, чтобы гарантировать, что она не введена двумя потоками одновременно.Псевдокод ...
Lock based on the fixture instance or an object created in the constructor.
Use test name to get file name
Open the file for appending
Write to the file
Close the file
Если вы не используете параллельное выполнение, нет ничего плохого в использовании более простого, непараллельного подхода.Но если вы это сделаете, обязательно пометьте тесты как не распараллеливаемые.В противном случае вы рискуете, что кто-то (даже ваш собственный забывчивый человек) придет позже и добавит атрибут на более высоком уровне, который делает тесты по умолчанию параллельными.