Итак, я недавно создал приемник сообщений xunit, который с этого момента я буду называть тестовым слушателем.
Что он делает: когда бегун xunit достигает точки события, такого как `ITestStarting ', он отправляет это событие слушателю. Теперь, как бегун xunit знает, как отправить этому слушателю?
class LoggerRunnerReporter : IRunnerReporter
{
public string Description => "Logger custom reporter";
public bool IsEnvironmentallyEnabled => true;
public string RunnerSwitch => "loggercustomreporter";
public IMessageSink CreateMessageHandler(IRunnerLogger logger)
{
return new LoggerMessageSink(logger);
}
}
Когда тесты начинаются, XUNIT сканирует сборку, в которой находятся тесты, и, если он находит класс, реализующий IRunnerReporter
, он регистрирует то, что находится внутри него, как приемник сообщений, который обрабатывает события.
Теперь вот моя проблема, так как это происходит полностью параллельно с фактическим бегуном (даже если бегун запускает тесты параллельно), у меня не будет доступа к фактическому ITestOutputHelper в моем приемнике сообщений, чтобы фактически иметь возможность что-либо регистрировать в приставка. Так есть ли обходной путь для этого?
Ради примера и мне не разрешено копировать фактическую реализацию приемника сообщений из этого примера (Моя реализация не такая, но концепция передачи помощника будет идентична).
Также, чтобы добавить к этому, я уже пытался каким-то образом получить экземпляр помощника посредством отражения и не смог этого сделать