按钮按下中代码的回归测试功能?

软件测试 回归测试
2022-01-27 18:04:20

我必须在我的 button_Click 方法中运行代码来进行回归测试,但由于该方法是私有的,我不能简单地从我的回归测试程序集中调用它。

private void button_Click(object sender, EventArgs e){
    //Does stuff
}

从这里采取的最佳方法是什么?我有两个想法:

  1. 将 button_Click 的内容放入单独的公共方法中
  2. 使 button_Click 成为公共方法

我更倾向于选项 1,因为它有助于在 UI 和业务逻辑之间建立更多的分离。也许有更好的方法来解决这个问题?

附录:

好的,这是一个简单的例子,我使用了一个“薄”的 UI 层。我是否正确理解这一点?RefreshForms 方法是表单代码的一部分,但将其放入它自己的方法中以使 button_Click 方法尽可能地精简。

那么,QA 代码只测试业务逻辑,一切都好吗?

表格代码:

private void button_Click(object sender, EventArgs e){
    int res = BusinessLogic.SquareIt(Convert.ToDouble(textBox1.Text));
    RefreshForms(res);
}

public void RefreshForms(){
    textBoxRes = res.ToString();
}

业务逻辑代码:

public void SquareIt(double input){
    return Math.Pow(input, 2);
}

质量保证代码:

[Test]
public void RunTest(){
    Assert.AreEqual(BusinessLogic.SquareIt(3),9);
}
4个回答

选项1

按钮单击方法应该只是一个瘦包装器,它调用另一个包含业务逻辑的方法。您可能希望查看 MVP 模式或 MVC 模式,以帮助您将业务逻辑与视图逻辑分开。

选项 3。

使用像WatiN这样的测试自动化框架来实际模拟按钮被点击。我用过WatiN 几次,它实际上很容易使用而且是免费的。

正如 Stuart 所建议的,将业务逻辑与 UI 层分离通常是最佳实践。http://www.testingmentor.com/imtesty/2010/02/02/api-testing-testing-in-layers/

理想情况下,您不应该出于测试目的而更改访问修饰符。您还可以考虑 protected 和 internal 访问修饰符。另外,我建议查看来自 MS Research 的 PEX 和 Moles http://research.microsoft.com/en-us/projects/pex/以测试 .NET 方法。

如果您不能或不想将业务逻辑与事件处理程序分开,那么另一种选择可能是使用任意数量的工具或 UIAutomation http://msdn.microsoft.com/en-us/编写基于 UI 的自动化测试library/ms747327.aspx(假设这个 .NET)。

我假设您的代码片段是 Java。

将要测试的代码重构为公共方法是一个不错的选择,但前提是新方法公开是有意义的。换句话说,如果私有方法是私有的有充分的理由,你需要确保你没有通过将一些逻辑移动到公共方法中来破坏这个决定。

另一种选择是将方法公开并添加诸如“仅用于测试目的的公开”之类的注释。

另一种选择是使用反射 API 来访问私有方法。有一些缺点:您的代码将更长且更难阅读,如果有人更改了方法签名,您的测试仍将编译,因此您不会发现问题,直到您的测试失败并显示“未找到此类方法” “ 错误。