在 MSTest 中组织测试名称

Organizing Test Names in MSTest

我正在使用 MSTest,我发现自己写了一些相当荒谬的测试方法名称,因此当我查看测试结果时,我可以了解什么是 运行。

为了弄清楚测试浏览器的结果列表中的内容,我最后几乎使用了一个 "namespace-inclusive" 方法名称。压断我脊背的稻草? PostImportMemberStagingBeginImportThrowsArgOutOfRangeIfImportMethodUnrecognized()

注意图像中的 GetImportReturnsImportView 方法。我将不得不在某个时候更改此名称,因为它可能最终会被几乎重复,而且它并没有真正告诉我它在测试什么。

在 MSTest window 中,我可以按 Class 排序,但这并没有多大作用(无论如何我更愿意按测试项目查看)。理想情况下是某种完整的树结果,这样我就可以按 namespace/test class.

进行深入研究

我可以使用什么样的测试命名约定来实现一些相当合理的东西,以便快速查看测试结果,而不必为方法名称疯狂?

我正在努力避免使用外部工具(我已经在外部使用 OpenCover 和 ReportGenerator 来实现集成级别的东西,所以这实际上只是为了在 VS 中快速参考)

您可以使用 TestCategory 属性更好地将测试组织到模块中。除此之外,我发现以Given..._When..._Then...格式命名测试,与测试主体相对应非常方便:

public class EditControllerTests
{
    [TestMethod]
    [TestCategory("Controller tests")]
    public void GivenSomething_WhenSomethingHappens_ThenResultIsSomething()
    {
        GivenSomeData(new Data() { X = 1, Y = 2 });

        WhenControllerActionExecutes(editController.Index);

        Assert.Equals(jsonResult, "...");
    }
}

当然,最好的办法是放弃 MSTest 并使用更成熟的东西,例如 NUnit(从一个到另一个的转换很容易自动执行)。 NUnit 有 类.

的类别

您可以在 class/assembly 级别应用 TestCategory 属性。 MSTest 支持这个:https://blogs.msdn.microsoft.com/visualstudioalm/2017/02/25/mstest-v2-now-and-ahead/ 如果您需要任何进一步的信息,请告诉我。