如何在 xUnit 中设置包含测试的 class 的显示名称?
How to set display name for class that contains tests in xUnit?
xUnit 为 [Fact]
属性提供了 DisplayName
属性 来指定我们的测试应该如何在 Visual Studio 的测试资源管理器中显示。例如:
public class BooksIntegrationTests
{
[Fact(DisplayName = "GET /api/books returns http status code 200")]
public Task Get_Books_ReturnsCollectionOfBooks()
{
// ... test code
}
}
因此,测试资源管理器不再显示方法名称 Get_Books_ReturnsCollectionOfBooks
,而是显示更友好的测试名称 GET /api/books returns http status code 200
。
但是是否有等效的方法在包含这些测试的 class 上指定 DisplayName
?我希望测试资源管理器显示类似 Integration tests for Books API resource
的内容,而不仅仅是 class 名称 BooksIntegrationTests
.
有没有办法通过一些 xUnit class 属性来做到这一点?
我发现在 Visual Studio 测试资源管理器 window 中以更友好的名称对 xUnit 测试进行分组的唯一方法是使用 Traits 功能,然后使用 UI 选项在测试资源管理器中按特征而不是 Class 对测试进行分组。
示例代码:
public class BooksIntegrationTests
{
[Xunit.TraitAttribute("Category", "Integration tests for Books API resource")]
[Fact(DisplayName = "GET /api/books returns http status code 200")]
public void Get_Books_ReturnsCollectionOfBooks()
{
// ... test code
}
[Trait("Category", "Integration tests for Books API resource")]
[Fact(DisplayName = "GET /api/books/book returns http status code 999")]
public void Get_BookByISBN_ReturnsSingleBook()
{
// ... test code
}
}
然后您的测试资源管理器将显示如下:
第一个 circled-in-red 按钮是 "Show Test Hierarchy" 按钮,它应该被删除select。就在它的右边是 "Group By..." 下拉菜单,单击它和 select 以按 "Traits" 分组。我使用了一个名为 "Category" 的特性来对两个 xUnit 测试进行分组,并发明了另一个测试 returns 一本书而不是一本书的集合。使用此视图,两个相关测试都显示在 "Category: Integration Tests for Books API Resource".
下
以上是针对VS2017的。我预计 VS2019 会是 same/similar.
我没有找到一种方法来完全你想做的,让分组依据"Class"在测试中显示更友好的名字探险家Window。我尝试在 AssemblyInfo.cs 文件中添加属性,更改项目属性,但没有任何方法可以更改 Class 视图。 可能有办法,但我没找到。希望这可以帮助您更接近您的目标。
P.S。 "Trait" 和 "TraitAttribute" 属性似乎是等效的并且可以互换。我在代码中展示了这两种形式来说明这一点。 "Trait" 似乎是属性的较新的首选形式,因为如果您选择 "Simplify" 名称,Visual Studio 会使用该形式。
xUnit 为 [Fact]
属性提供了 DisplayName
属性 来指定我们的测试应该如何在 Visual Studio 的测试资源管理器中显示。例如:
public class BooksIntegrationTests
{
[Fact(DisplayName = "GET /api/books returns http status code 200")]
public Task Get_Books_ReturnsCollectionOfBooks()
{
// ... test code
}
}
因此,测试资源管理器不再显示方法名称 Get_Books_ReturnsCollectionOfBooks
,而是显示更友好的测试名称 GET /api/books returns http status code 200
。
但是是否有等效的方法在包含这些测试的 class 上指定 DisplayName
?我希望测试资源管理器显示类似 Integration tests for Books API resource
的内容,而不仅仅是 class 名称 BooksIntegrationTests
.
有没有办法通过一些 xUnit class 属性来做到这一点?
我发现在 Visual Studio 测试资源管理器 window 中以更友好的名称对 xUnit 测试进行分组的唯一方法是使用 Traits 功能,然后使用 UI 选项在测试资源管理器中按特征而不是 Class 对测试进行分组。 示例代码:
public class BooksIntegrationTests
{
[Xunit.TraitAttribute("Category", "Integration tests for Books API resource")]
[Fact(DisplayName = "GET /api/books returns http status code 200")]
public void Get_Books_ReturnsCollectionOfBooks()
{
// ... test code
}
[Trait("Category", "Integration tests for Books API resource")]
[Fact(DisplayName = "GET /api/books/book returns http status code 999")]
public void Get_BookByISBN_ReturnsSingleBook()
{
// ... test code
}
}
然后您的测试资源管理器将显示如下:
第一个 circled-in-red 按钮是 "Show Test Hierarchy" 按钮,它应该被删除select。就在它的右边是 "Group By..." 下拉菜单,单击它和 select 以按 "Traits" 分组。我使用了一个名为 "Category" 的特性来对两个 xUnit 测试进行分组,并发明了另一个测试 returns 一本书而不是一本书的集合。使用此视图,两个相关测试都显示在 "Category: Integration Tests for Books API Resource".
下以上是针对VS2017的。我预计 VS2019 会是 same/similar.
我没有找到一种方法来完全你想做的,让分组依据"Class"在测试中显示更友好的名字探险家Window。我尝试在 AssemblyInfo.cs 文件中添加属性,更改项目属性,但没有任何方法可以更改 Class 视图。 可能有办法,但我没找到。希望这可以帮助您更接近您的目标。
P.S。 "Trait" 和 "TraitAttribute" 属性似乎是等效的并且可以互换。我在代码中展示了这两种形式来说明这一点。 "Trait" 似乎是属性的较新的首选形式,因为如果您选择 "Simplify" 名称,Visual Studio 会使用该形式。