Я знаю и читал о * XUnit ITestOutputHelper
и Debug.Trace
методах, но мне было интересно, есть ли другой возможный способ, который позволил бы мне использовать статический регистратор в моем коде ниже, возможно, у Xunit есть точка расширяемости о чем я не знаю?
У меня есть метод расширения, который позволяет мне писать модульные тесты в стиле BDD, и было бы здорово, если бы я мог выводить каждый шаг в окно вывода:
internal static class Spec
{
internal static void x(this string step, Action x)
{
try
{
x();
//print step to the output window
}
catch (Exception ex)
{
throw new Exception($"\n\n{step} failed\n", ex);
}
}
internal static void x(this string step)
{
}
}
приведенный выше код позволяет мне писать тесты так:
[Theory]
[AutoMoqData]
public void CorrelationId_WhenCorrelationIdIsPassedIn(
string result,
string correlationId,
[Frozen(Matching.DirectBaseType)] DefaultHttpContext httpContext,
[Frozen] Mock<IHttpContextAccessor> httpContextAccessorMock,
CorrelationIdProvider sut)
{
$"Given a correlation id header value of {correlationId} has been passed in"
.x(() =>
{
httpContext.Request.Headers["x-Correlation-ID"] = correlationId;
httpContextAccessorMock.Setup(x => x.HttpContext).Returns(httpContext);
});
"When the correlation id is retrieved"
.x(() => result = sut.CorrelationId);
"Then the correlation id is not empty"
.x(() => result.Should().NotBeEmpty());
$"And the correlation id matches {correlationId}"
.x(() => result.Should().Be(result));
}