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