c# - 是否应该为事件驱动代码中的私有(private)方法编写单元测试?

标签 c# unit-testing

我正在使用 C# 编写我的第一个 Windows 窗体程序。它由 3 个类组成,每种形式一个。除了构造函数之外,每个类中的所有方法都是私有(private)的。

在试图弄清楚如何为方法编写单元测试时,我发现一些帖子和文章说不应该对私有(private)方法进行单元测试,因为私有(private)方法是一种实现,而不是公共(public)行为.

我想我理解这个推理,但这似乎意味着我的代码没有将有为其编写的单元测试。一切都是事件驱动的,当单击按钮、在字段中输入值或计时器计时时发生。

这是正确的吗?我的代码应该没有单元测试吗? (如果这与另一个问题重复,我深表歉意。我查看了,但找不到解决此问题的任何内容。)

最佳答案

事实上,私有(private)方法是应用程序的私有(private)实现,不应该对其进行单元测试。大多数时候,它们将通过公共(public)方法在内部调用。通过测试公共(public)方法,您就可以测试那些私有(private)方法。

正如您所说,您的私有(private)方法是事件驱动的,当用户单击按钮等时将执行...如果您认为您的事件处理程序包含大量应该测试的逻辑,那么我建议按照以下步骤操作:

  1. 使用 internal 修饰符标记包含事件处理程序的所有类(表单)。使用此修饰符,这些类只能在定义它们的同一程序集中访问。
  2. 您还需要使用 public 修饰符标记所有事件处理程序方法。由于第 1 步中的类是内部,因此这些方法仅对定义它们的程序集可见,然后仅在 Windows 窗体项目中可见。
  3. 在 Windows 窗体项目的 AssemblyInfo.cs 文件中添加以下属性:[ assembly:InternalsVisibleTo("MyTestAssemblyName")] 其中 MyTestAssemblyName 是测试项目的程序集名称。
  4. 通过执行步骤 3,您的所有内部类因此事件处理程序对您的测试项目也是可见的。在此步骤中,将您的 Windows Formsq 项目引用到您的测试项目,然后您可以像对每种方法一样对您的事件处理程序进行单元测试。

关于c# - 是否应该为事件驱动代码中的私有(private)方法编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35395817/

相关文章:

c# - 如果我想对以表达式作为参数的方法进行单元测试,我应该更改什么?

php - 测试覆盖特征方法执行

c# - String.Split() - 将连续的定界符视为一个

javascript - 如何将日语汉字翻译成片假名

Python 单元测试结果文件

python - 我应该如何在Python中使用Mocks进行测试?

javascript - 如何在另一个函数中模拟一个函数nodejs

c# - OracleCommand 命令,ExecuteNonQuery 问题

c# - 如何将 C++ union 类型转换为 C# 代码?

c# - PictureBox BackgroundImage 属性 C#