单元测试代码覆盖率应该包括什么?

What should include in unit test code coverage?

我正在为 class

编写测试方法

例如:

class employee{

   public int ButtonID
        {
            get
            {
                return 
                function(GetValue("ButtonID"), 0);
            }
            set
            {
                SetValue("ButtonID", value);
            }
        }

    public function getEmployeeID()
    {somthing; }

    private function setEmployeeID()
    {somthing; }

    protected button_click(e)
    { somthing; }

}

这里我们计算代码覆盖率的时候还包括了

  1. getter 和 setter 方法
  2. 按钮点击事件。
  3. public 函数
  4. 私有函数

Am I supposed to see the coverage of all above four?

具体到第 1 点和第 2 点:

测试 getter 和 setter 取决于那些访问器方法在做什么。如果它们是自动实现的,那么我不建议明确测试它们。我信任 .NET Framework 的实现。如果您正在寻找增加的代码覆盖率,那么请确保在其他测试期间同时 getset 和 属性,并且覆盖率将被计算在内。

如果 属性 访问器中发生了更复杂的事情,那么使用单元测试来帮助创建它(如果遵循测试优先 TDD)或确保实现逻辑可能会很有用正确。

当涉及到UI特定代码时,不值得尝试使用单元测试来测试它。尝试在单元测试中操纵 UI 会导致不稳定、缓慢的测试。如果您想在按钮单击处理程序中测试某些内容,请尝试将该功能提取到另一个可以更轻松地进行单元测试的 class 中。使代码隐藏文件尽可能精简——将工作委派给您可以测试的其他 classes。

关于第 3 点和第 4 点:

正如评论者指出的那样,public 方法为创建单元测试提供了丰富的目标区域。您希望确保 class 的 public API 能够按预期执行,测试 public 方法让您有机会了解使用class 正在测试中。如果某些东西在测试中使用起来很笨拙,则可能表明需要更改设计。

仅通过您的 public 方法测试您的私有方法。单元测试应该测试 class 的行为,而不是实现。理论上,您应该能够通过您的 public 方法来使用您的私有方法。