将 ITestOutputHelper 与 Selenium、xUnit 和 C# 结合使用

Kev*_*Kev 5 c# selenium automated-tests xunit specflow

我最近将一个项目从 NUnit 切换到 xUnit,以便可以使用 ITestOutputHelper 输出到日志。

该项目是一个相当标准的布局

功能文件->步骤类->页面类->帮助类。在辅助类中我们还有 hooks.class。我正在使用 xUnit 运行程序。

所以在我的 hooks 类中我创建了这个

private readonly ScenarioContext _scenarioContext;
private ITestOutputHelper _testOutputHelper;

public Hooks(ScenarioContext scenarioContext, ITestOutputHelper testOutputHelper)
{
    _scenarioContext = scenarioContext;
    this._testOutputHelper = testOutputHelper;
}

public void WriteOutput(string theMessage)
{
    _testOutputHelper.WriteLine(theMessage);
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是如何从其他类访问 WriteOutput 函数?或者我把它放在错误的班级里了?

Kev*_*Kev 1

在另一位开发者的帮助下得到了答案,见下文

步骤类 TestAppSteps

using Xunit.Abstractions;

[Binding]
public sealed class TestAppSteps : TestAppPage
{
    public TestAppSteps(ITestOutputHelper output) : base(output)
    {
    }

    code
}           
Run Code Online (Sandbox Code Playgroud)


使用 Xunit.Abstractions 的页面类 TestAppPage ;

public class TestAppPage : PageAssertions
{

    public TestAppPage(ITestOutputHelper output) : base(output)
    {

    }
    
    code
}
Run Code Online (Sandbox Code Playgroud)

使用 Xunit.Abstractions 的实用程序类 PageAssertions;

public class PageAssertions : SharedClass
{
    public PageAssertions(ITestOutputHelper output) : base(output) { }

    code inc'
    WriteToReport("Pass: URL is correct");
}
Run Code Online (Sandbox Code Playgroud)

使用 Xunit.Abstractions 的实用程序类 SharedClass;

public abstract class SharedClass : OutputFunctions
{
    public SharedClass(ITestOutputHelper output) 
        : base(output)
    {
    }
    
    shared code including
    WriteToReport(GetTheCurrentMethod());
}   
Run Code Online (Sandbox Code Playgroud)

抽象类输出函数

使用 Xunit.Abstractions;

public abstract class OutputFunctions
{
    protected readonly ITestOutputHelper _output;

    public OutputFunctions(ITestOutputHelper output)
    {
        _output = output;
    }

    public void WriteToReport(string theMessage)
    {
        _output.WriteLine(theMessage);
    }
}
Run Code Online (Sandbox Code Playgroud)