mls*_*lst 5 .net unit-testing xunit xunit.net
xUnit gives us DisplayName property for [Fact] attribute to specify how our test should be displayed in test explorer in Visual Studio. For example:
public class BooksIntegrationTests
{
[Fact(DisplayName = "GET /api/books returns http status code 200")]
public Task Get_Books_ReturnsCollectionOfBooks()
{
// ... test code
}
}
Run Code Online (Sandbox Code Playgroud)
So instead of displaying method name Get_Books_ReturnsCollectionOfBooks test explorer now shows more friendlier test name GET /api/books returns http status code 200.
But is there an equivalent way for specifying DisplayName on a class that contains these tests? I'd like test explorer to show something like Integration tests for Books API resource instead of just class name BooksIntegrationTests.
Is there a way to do this via some xUnit class attribute?
我发现在 Visual Studio 测试资源管理器窗口中以更友好的名称对 xUnit 测试进行分组的唯一方法是使用特征功能,然后使用测试资源管理器中的 UI 选项按特征而不是按类对测试进行分组。示例代码:
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
}
}
Run Code Online (Sandbox Code Playgroud)
然后您的测试资源管理器将显示如下:
第一个红圈按钮是“Show Test Hierarchy”按钮,应该取消选择它。就在它的右侧是“分组依据...”下拉菜单,单击它并选择按“特征”分组。我使用名为“Category”的特征将两个 xUnit 测试分组,并发明了另一个测试,它返回一本书而不是书的集合。使用此视图,两个相关测试都显示在“类别:图书 API 资源的集成测试”下。
以上是针对VS2017的。我希望 VS2019 会相同/相似。
我没有找到一个方法来做到正是你试图做,让它尽量集团通过“类”节目更友好的测试资源管理器窗口的名称。我尝试在 AssemblyInfo.cs 文件中放入属性,更改项目属性,但没有任何工作可以更改类视图。有可能是一种方式,但我没有找到它。希望这有助于让你更接近你的目标。
PS "Trait" 和 "TraitAttribute" 属性似乎是等效和可互换的。我在代码中展示了这两种形式来说明这一点。似乎“特征”可能是该属性的较新的首选形式,因为如果您选择“简化”名称,Visual Studio 将使用该形式。