我们如何确保所有 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,您可以在其中设置不同的样式指南,并且可以为此制定规则,但我不确定。即使它不适用于此问题,如果您在视觉工作室工作,我也会推荐它。
我们今天有一个 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,您可以在其中设置不同的样式指南,并且可以为此制定规则,但我不确定。即使它不适用于此问题,如果您在视觉工作室工作,我也会推荐它。