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

Xunit-参数化测试-类属性-C#,c#,xunit,C#,Xunit,我正在使用Xunit运行一些Selenium测试。我想参数化一些测试,但有一些困难 我有一个类,它将元素的位置存储为属性“IssuesLogUtils” 然后在另一个TestClass文件中进行Xunit测试。 我只想在测试中使用IssuesLogUtils中的属性作为参数 e、 g 我在网上找到了一些文章,指出了做这件事的复杂方法。有直路吗?我不想创建一个参数列表,然后将该列表传入 但是Xunit不允许我使用属性作为参数 这不是XUnit的错内联数据属性值必须在编译时“已知”,类似于常量。 某

我正在使用Xunit运行一些Selenium测试。我想参数化一些测试,但有一些困难

我有一个类,它将元素的位置存储为属性“IssuesLogUtils”

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

e、 g

我在网上找到了一些文章,指出了做这件事的复杂方法。有直路吗?我不想创建一个参数列表,然后将该列表传入

但是Xunit不允许我使用属性作为参数

这不是XUnit的错<代码>内联数据属性值必须在编译时“已知”,类似于常量。
某些类实例的属性是运行时值,不能用于常量或属性值

请注意,您不需要创建一个类,您可以使用带有
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();
}
公共静态IEnumerable MyIssuesData()
{
var issues=新发行的Logutils();
返回新对象[]{issues.page_heading};
返回新对象[]{issues.issue_title};
}
[理论]
[成员数据(名称(MyIssuesData))]
公共无效不应做任何事情(按问题)
{
var结果=DoSomethingWith(发布);
result.Should().BeEmpty();
}

不,它不是@Fabio。这要求我创建一个类,该类返回一个带有参数的对象。InlineData允许我非常简单地将int/string作为参数写入。但是Xunit不允许我使用属性作为参数。属性本身可能只是一个字符串,但如果我不使用params创建一些复杂的类,它就不允许我使用它。超级!这几乎完美地工作了,谢谢@Fabio。轻微的问题是,测试资源管理器并没有将参数作为单独的测试来处理,它们是串行运行的,而不是并行运行的。我想知道如果我返回一个对象列表,它会工作吗?@agleno,同一测试类中的所有测试都是按顺序执行的。
 [Theory]
    [InlineData(issues_log_utils.ifco_radial)]
    [InlineData(issues_log_utils.issue_title)]
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();
}