单元测试代码覆盖率应该包括什么?
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; }
}
这里我们计算代码覆盖率的时候还包括了
- getter 和 setter 方法
- 按钮点击事件。
- public 函数
- 私有函数
Am I supposed to see the coverage of all above four?
具体到第 1 点和第 2 点:
测试 getter 和 setter 取决于那些访问器方法在做什么。如果它们是自动实现的,那么我不建议明确测试它们。我信任 .NET Framework 的实现。如果您正在寻找增加的代码覆盖率,那么请确保在其他测试期间同时 get
和 set
和 属性,并且覆盖率将被计算在内。
如果 属性 访问器中发生了更复杂的事情,那么使用单元测试来帮助创建它(如果遵循测试优先 TDD)或确保实现逻辑可能会很有用正确。
当涉及到UI特定代码时,不值得尝试使用单元测试来测试它。尝试在单元测试中操纵 UI 会导致不稳定、缓慢的测试。如果您想在按钮单击处理程序中测试某些内容,请尝试将该功能提取到另一个可以更轻松地进行单元测试的 class 中。使代码隐藏文件尽可能精简——将工作委派给您可以测试的其他 classes。
关于第 3 点和第 4 点:
正如评论者指出的那样,public 方法为创建单元测试提供了丰富的目标区域。您希望确保 class 的 public API 能够按预期执行,测试 public 方法让您有机会了解使用class 正在测试中。如果某些东西在测试中使用起来很笨拙,则可能表明需要更改设计。
仅通过您的 public 方法测试您的私有方法。单元测试应该测试 class 的行为,而不是实现。理论上,您应该能够通过您的 public 方法来使用您的私有方法。
我正在为 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; }
}
这里我们计算代码覆盖率的时候还包括了
- getter 和 setter 方法
- 按钮点击事件。
- public 函数
- 私有函数
Am I supposed to see the coverage of all above four?
具体到第 1 点和第 2 点:
测试 getter 和 setter 取决于那些访问器方法在做什么。如果它们是自动实现的,那么我不建议明确测试它们。我信任 .NET Framework 的实现。如果您正在寻找增加的代码覆盖率,那么请确保在其他测试期间同时 get
和 set
和 属性,并且覆盖率将被计算在内。
如果 属性 访问器中发生了更复杂的事情,那么使用单元测试来帮助创建它(如果遵循测试优先 TDD)或确保实现逻辑可能会很有用正确。
当涉及到UI特定代码时,不值得尝试使用单元测试来测试它。尝试在单元测试中操纵 UI 会导致不稳定、缓慢的测试。如果您想在按钮单击处理程序中测试某些内容,请尝试将该功能提取到另一个可以更轻松地进行单元测试的 class 中。使代码隐藏文件尽可能精简——将工作委派给您可以测试的其他 classes。
关于第 3 点和第 4 点:
正如评论者指出的那样,public 方法为创建单元测试提供了丰富的目标区域。您希望确保 class 的 public API 能够按预期执行,测试 public 方法让您有机会了解使用class 正在测试中。如果某些东西在测试中使用起来很笨拙,则可能表明需要更改设计。
仅通过您的 public 方法测试您的私有方法。单元测试应该测试 class 的行为,而不是实现。理论上,您应该能够通过您的 public 方法来使用您的私有方法。