Xunit - 参数化测试 - Class 属性 - C#

Xunit - Parameterized Tests - Class Properties - C#

我正在使用 Xunit 运行 一些 Selenium 测试。我想对一些测试进行参数化,但遇到了一些困难。

我有一个 class,其中元素的定位器存储为属性“IssuesLogUtils”

public class IssuesLogUtils
{
    // Page Heading
    public By page_heading { get; set; } = By.Id("ctl00_lblPageTitle");

    public By issue_title { get; set; } = By.Id("ctl00_ContentPlaceHolder1_txtNonComplianceName");

然后我在另一个 TestClass 文件中进行 Xunit 测试。 我只想在我的测试中使用 IssuesLogUtils 的属性作为参数。

例如

 [Theory]
    [InlineData(issues_log_utils.ifco_radial)]
    [InlineData(issues_log_utils.issue_title)]

我在网上找到了一些文章,指出了执行此操作的非常复杂的方法。有什么直接的方法吗?我不想创建一个参数列表,然后将列表传入。

But Xunit won't let me use a property as a param

这不是 XUnit 故障。 InlineData 属性值必须在编译时“已知”,类似于常量。
某些 class 实例的属性是运行时值,不能用于常量或属性值。

注意你不需要创建一个class你可以使用带有MemberData属性的静态方法,你可以把它放在测试方法旁边,所以你在阅读时很容易看到它测试方法。

public static IEnumerable<object[]> MyIssuesData()
{
    var issues = new IssuesLogUtils();
    yield return new object[] { issues.page_heading  };
    yield return new object[] { issues.issue_title  };
}

[Theory]
[MemberData(nameof(MyIssuesData))]
public void Should_do_nothing(By issue)
{
     var result = DoSomethingWith(issue);

     result.Should().BeEmpty();
}