我们如何确保所有 NUnit [Test] 方法都是 public?

How can we make sure that all NUnit [Test] methods are public?

我们今天有一个 missed/skipped 测试案例:

开发人员错过了制作 [Test] public 的机会,因此 NUnit (v 3.9.0) 没有 运行 它。

[TestFixture]
public class StackTests
{
    [Test]
    public void Fail1()
    {
        Assert.Fail("Will be run");
    }

    [Test]
    void Fail2()
    {
        Assert.Fail("will NOT be run - none the wiser");
    }
}

当开发人员注意到 Fail2 不是 运行ning 时,他又花了 20 分钟试图找出它没有被发现的原因,结果 (U +1F926) 当我们注意到缺少 public.

根据我的经验,NUnit [Test] 方法上缺少 public 是一个重复的绊脚石,很容易错过。

有没有办法让 NUnit 或编译器警告非 public [Test] 方法?

还是我们偶尔会卡住?

有一个analyzers package for NUnit. It doesn't look like there's an analyzer for your case yet, but there is an open issue

你可以贡献一个分析器——看起来讨论停留在测试装置应该有什么构造函数上,我怀疑他们会接受一个分析器,它只是检查测试方法是 public,这写起来应该相当简单。


另一种选择是采用始终指定访问修饰符的编码标准——因此 void Fail2() 将被禁止,但 public void Fail2()private void Fail2() 将被接受。您可以使用 .editorconfig 规则 dotnet_style_require_accessibility_modifiers = always.

强制执行此操作

有一个非常酷的格式化工具,resharper,您可以在其中设置不同的样式指南,并且可以为此制定规则,但我不确定。即使它不适用于此问题,如果您在视觉工作室工作,我也会推荐它。