回归测试和单元测试示例 - Windows 表单 LOB 应用程序

Example of a Regression Test & Unit Test - Windows Forms LOB application

我们有一个尽可能遵循 MVP 模式的 LOB Winforms 应用程序。

在每个新版本中,我们都希望针对任何回归进行测试。

目前的做法是,每次测试人员 bug/crash,我们重现错误,然后使用 NUnit 插入测试。通常这个测试会尝试重现用户所遵循的一系列操作,所以我们最终得到这样的测试:MenuX_OperationY_buttonDoZ_Click_ERROR_DESCRIPTION()

测试通常准备上下文,加载数据,执行用户点击的动作来重现bug。然后修复错误并重新运行测试。依此类推......,直到我们拥有大量现有(回归?)测试。这种测试的例子是:

[Test]
public void MenuX_OperationY_buttonDoZ_Click_ERROR_DESCRIPTION()
{
    // The presenter prepares Context & Load Data associated with Menu X
    PrsMenuX.PrepareContext();
    PrsMenuX.LoadData();

    // Do Operation Y
    PrsMenuX.OperationY();

    // Click on Button Do Z
    try
    {
        PrsMenuX.ButtonDoZ_Click();
    }
    catch (Exception ex)
    {
        Assert.Fail(ex.Message);
    }
}

所以我的问题是,这是正确的方法吗? NUnit 是正确的工具吗?如何改进它?测试应该重现用户的操作,还是我们应该只对构成每个用户操作的低级函数进行单元测试?

这取决于失败的原因。如果它是您代码中算法中的错误而失败,那么它可能应该通过单元测试进行测试。如果它更像是一个意外的使用错误,那么它应该是一个更高级别的 acceptance/behaviour 测试。仅仅因为您添加了单元测试并不意味着您不应该添加更高级别的测试。

另外,一般只有在发现错误后才添加测试似乎有点晚了。如果在添加新功能或编辑现有功能时编写测试会更好。在编写代码的同时编写好的测试通常比在以后为未知或遗忘的代码编写测试要容易得多。实践这一点将防止更多的错误在一开始就被引入。