How to set display name for class that contains tests in xUnit?

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?

Dev*_*ica 6

我发现在 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 将使用该形式。