C# 我们如何确保所有NUnit[测试]方法都是公开的?

C# 我们如何确保所有NUnit[测试]方法都是公开的?,c#,nunit,nunit-3.0,.net-attributes,C#,Nunit,Nunit 3.0,.net Attributes,今天我们遇到了一个遗漏/跳过的测试用例: 开发人员没有将[Test]公开,因此NUnit(v3.9.0)没有运行它 [TestFixture] public class StackTests { [Test] public void Fail1() { Assert.Fail("Will be run"); } [Test] void Fail2() { Assert.Fail("will NOT be r

今天我们遇到了一个遗漏/跳过的测试用例:

开发人员没有将
[Test]
公开,因此NUnit(v3.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
没有运行时,他又花了20分钟试图找出它没有被发现的原因,结果发现了一个NUnit。你的案子还有分析工具,但确实有

你可以贡献一个分析器——看起来讨论的焦点是测试夹具应该有什么构造函数,我怀疑他们会接受一个分析器,它只是检查测试方法是公共的,编写起来应该相当简单



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

有一个非常酷的格式工具resharper,您可以在其中设置不同的样式指南,并且可能能够为此制定规则,但我不确定。即使它对这个问题不起作用,如果你在visual Studio工作,我也会推荐它

您可能会在基类中的某个位置使用GetType().IsPublic,可能会检查所有方法是否都是公共的,其他任何方法都会抛出警告消息。如果在添加测试方法之后运行测试,您很快就会注意到1。测试资源管理器2未发现新测试。测试在运行期间未执行。若在编写代码之前先编写测试,那个就更好了,那个么在编写代码之前就应该得到失败的测试。这将很快表明出了问题,因为没有什么失败。