c# - 创建和运行测试

标签 c# .net visual-studio-2010 unit-testing

我使用单元测试向导在我的解决方案中创建了一个单元测试:我选择了类及其所有方法和属性,然后向导为每个类创建了一个包含测试方法的新文件测试方法。

显然,测试应该是可靠的,也就是说,只有当模块没有按预期工作而不是因为测试构建不当时,测试才会失败。因此,第一个问题是:构建测试应遵循哪些准则?

在创建我的第一个测试时,我试图编写简单的测试用例,从而减少出错的可能性:例如,要测试一个集合,您需要向它添加一些元素,所以我创建了一个私有(private)方法,例如以下是我的测试单元:

// This is not a test method, but a support method for the test methods.
private void AddSomeElements(ICollection c, int count)
{
    Random rand = new Random();
    ...
    for(int i=0; i < count; i++)
        c.Add(...);
}

因此,例如,Count 属性的测试可以是:

/// <summary>
///A test for Count
///</summary>
[TestMethod()]
public void CountTest()
{
    HostsCache target = new HostsCache();
    AddSomeElements(target, 100);
    int actual;
    actual = target.Count;
    Assert.AreEqual<int>(100, actual);
 }

这种方法是否正确? 假设 Add 方法返回一个值(例如一个 bool 值):在这种情况下,上面的私有(private)方法是否也应该返回这个值?

最佳答案

我在编写测试时遇到的最大错误之一是忘记将测试视为一流代码。也就是说,将它们分解为易于维护和修改的方式,因为您的应用程序(以及,通过扩展,测试)的发展。

我见过的第二大错误是在每个测试中覆盖了太多代码。理想情况下,每个测试应该只测试几行代码。绝对不会比单个方法中包含的代码更多。

因此,如果您的示例中的 AddSomeElements 返回某些内容是有意义的,请让它返回一些内容。如果没有,就不要。

只要记住两件事:

  1. 您的测试是一流的代码
  2. 每个测试都应该只测试很小的一部分功能。

关于c# - 创建和运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9318712/

相关文章:

c# - 我可以在 OneLiner (C#) 中转换这两个 LINQ 语句吗

c# - 当前上下文中不存在名称 'File'

c# - 使用 ImageGen 时出现类型或 namespace 错误

c# - 如何裁剪字节数组图像

.net - Visual Studio "Find in Files"不起作用

asp.net - 尝试使用 Visual Studio 2010 和 AJAX 扩展的问题

c# - FileStream.Seek 与缓冲读取

c# - 子列表项未在 C# 中显示

c# - C# 的排序集如何与自定义对象一起使用?

c# - WP7 工具包 - 当通过代码(不是用户输入)更改时,如何忽略 ListPicker 的 "SelectionChanged"和 ToggleSwitch 的 "Checked"事件等事件?