我正在使用 C# 编写我的第一个 Windows 窗体程序。它由 3 个类组成,每种形式一个。除了构造函数之外,每个类中的所有方法都是私有(private)的。
在试图弄清楚如何为方法编写单元测试时,我发现一些帖子和文章说不应该对私有(private)方法进行单元测试,因为私有(private)方法是一种实现,而不是公共(public)行为.
我想我理解这个推理,但这似乎意味着我的代码没有将有为其编写的单元测试。一切都是事件驱动的,当单击按钮、在字段中输入值或计时器计时时发生。
这是正确的吗?我的代码应该没有单元测试吗? (如果这与另一个问题重复,我深表歉意。我查看了,但找不到解决此问题的任何内容。)
最佳答案
事实上,私有(private)方法是应用程序的私有(private)实现,不应该对其进行单元测试。大多数时候,它们将通过公共(public)方法在内部调用。通过测试公共(public)方法,您就可以测试那些私有(private)方法。
正如您所说,您的私有(private)方法是事件驱动的,当用户单击按钮等时将执行...如果您认为您的事件处理程序包含大量应该测试的逻辑,那么我建议按照以下步骤操作:
- 使用
internal
修饰符标记包含事件处理程序的所有类(表单)。使用此修饰符,这些类只能在定义它们的同一程序集中访问。 - 您还需要使用
public
修饰符标记所有事件处理程序方法。由于第 1 步中的类是内部
,因此这些方法仅对定义它们的程序集可见,然后仅在 Windows 窗体项目中可见。 - 在 Windows 窗体项目的 AssemblyInfo.cs 文件中添加以下属性:
[ assembly:InternalsVisibleTo("MyTestAssemblyName")]
其中 MyTestAssemblyName 是测试项目的程序集名称。 - 通过执行步骤 3,您的所有内部类因此事件处理程序对您的测试项目也是可见的。在此步骤中,将您的 Windows Formsq 项目引用到您的测试项目,然后您可以像对每种方法一样对您的事件处理程序进行单元测试。
关于c# - 是否应该为事件驱动代码中的私有(private)方法编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35395817/