c# - 将 ITestOutputHelper 与 Selenium、xUnit 和 C# 一起使用
问题描述
我最近将一个项目从 NUnit 切换到 xUnit,以便可以使用 ITestOutputHelper 输出到日志。
该项目是一个相当标准的布局
功能文件->步骤类->页面类->帮助类。包括在帮助类中,我们也有 hooks.class。我正在使用 xUnit 跑步者。
所以在我的钩子类中,我创建了这个
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);
}
现在我的问题是如何从其他类访问 WriteOutput 函数?还是我把它放在了错误的班级?
解决方案
由于你的钩子类已经接受了一个 ITestOutputHelper 对象,你的其他步骤定义只需要做同样的事情。从那时起,它只是老式的依赖注入。
如果您在每个步骤定义类中初始化页面模型和实用程序类,因为看起来 ITestOutputHelper 已经在 SpecFlow 的依赖注入框架中注册,您可以将对帮助器的引用从构造函数传递到构造函数。
例如,将构造函数 arg 和字段添加到步骤定义:
[Binding]
public class LoginSteps
{
private ITestOutputHelper testOutputHelper;
private LoginPage loginPage;
private SomeUtility utility;
public LoginSteps(IWebDriver driver, ITestOutputHelper testOutputHelper)
{
this.testOutputHelper = testOutputHelper;
// Pass the test output helper to a page model
loginPage = new LoginPage(driver, testOutputHelper);
// Pass the test output helper to a utility class
utility = new SomeUtility(testOutputHelper);
}
[Given(@"the user is logged in as ""(.*)"")")]
public void GivenTheUserIsLoggedInAs(string username)
{
testOutputHelper.WriteLine("...");
loginPage.LogIn(username);
}
}
然后页面模型和实用程序类需要构造函数参数和字段:
public class LoginPage
{
private IWebDriver driver;
private ITestOutputHelper testOutputHelper;
public LoginPage(IWebDriver driver, ITestOutputHelper testOutputHelper)
{
this.driver = driver;
this.testOutputHelper = testOutputHelper;
}
// ...
}
public class SomeUtility
{
private ITestOutputHelper testOutputHelper;
public SomeUtility(ITestOutputHelper testOutputHelper)
{
this.testOutputHelper = testOutputHelper;
}
// ...
}
推荐阅读
- python-3.x - Python:如何从solve_ivp解释y
- laravel - 从观察者方法加载模型关系
- python - 转换边界框格式
- c++ - 如何将 ASCII 控制字符音译为它们的 UTF-8 符号等价物?
- docker - Docker撰写网络不绑定IP地址
- python - 从验证码图像中删除曲线打开 cv
- ssh - 使用 SSH 的 Bitbucket 管道 yml 部署引发错误
- python - 如何在 Matplotlib 和 Seaborn 中的 x 轴刻度线(不是刻度线标签)和 x 轴之间添加填充
- java - 列出 Google Cloud Storage 目录中的 Blob 返回错误结果
- angular - 使用 Angular 10 在 HTML2Canvas 中显示令人惊叹的图标