应该在事件驱动的代码中为私有方法编写单元测试吗?

时间:2016-02-14 18:58:52

标签: c# unit-testing

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

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

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

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

1 个答案:

答案 0 :(得分:2)

确实,私有方法是应用程序的私有实现,它们不应该是对它们进行单元测试。大多数时候,他们将通过公共方法进行内部调用。通过测试公共方法,您将测试这些私有方法。

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

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