unit-testing - TDD/单元测试 Windows 应用程序?

标签 unit-testing testing tdd

我对进行任何类型的测试都很陌生,但我读了一些书,这似乎是一个很好的方法。我喜欢只需单击一个按钮即可确保代码库稳定的想法。只要测试通过就可以自由破解,这很有趣。

但是,我的软件是基于 Windows 的程序。基本上它所做的是与用户桌面上的其他窗口交互,并根据特定标准在屏幕上移动它们。如果 XX 图像可见,将该窗口移动到 x/y 坐标。如果在该窗口上按下 F9 键盘快捷键,将其移动到 x2/y2 坐标。等等

我不知道如何进行任何类型的测试。感谢您的帮助。

最佳答案

既然你提到你是初学者,我会在这里添加一个提醒,你需要小心你测试的什么。你想测试你的逻辑,而不是 Windows。为此,您需要将您的关注点分为一个(或多个)包含您的逻辑的类,以及包含您使用的 API 的包装器(代理)的类——您不测试 API。它们一直有效,直到您证明不是这样。

您将想要测试您的类,并对代理进行 stub 或模拟。在上面的示例中,例如,如果您正在使用 Windows API 命令来交付您的解决方案,您将把移动窗口的命令放入 WindowsProxy 类中,并模拟调用,验证调用它们,但实际上并没有在测试中运行它们。

如果您使用的是 .NET、Windows-Forms 或一些类似的框架,您需要使用支持测试的模式,例如 MVP .您想要编写测试来运行 Presenter,同时 stub 或模拟 View(您的窗口)和 Model(任何 API或您使用的域对象)。

这是一个示例架构:

public interface IView { ... }

public class View : IView
{
   private Presenter _p;
   View()
   {
      _p = new Presenter(this);
      ...
   }

}

public class Presenter
{
   presenter IView _v;
   Presenter(IView view)
   {
      _v = view;
   }
}

使用类似 Moq 的模拟框架,您可以轻松地对 View 进行 stub 和模拟,并测试演示者(您所有的逻辑都将驻留在其中)。使用 Moq,您可以让被测类在 mock 上设置值,然后验证它们的值(例如窗口的坐标)。

希望这对您有所帮助。我花了很多时间开发基于 Win-Form 的自定义控件,并使用 TDD 开发它们。一旦掌握了窍门,这并非不可能,甚至也不是困难。

如果您需要进一步说明,请告诉我。

阿萨夫。

关于unit-testing - TDD/单元测试 Windows 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5728034/

相关文章:

python - Postgres : test insert or update before doing it?

python - 我需要 Python 中的数据库清理器吗?

java - 当类可以通过黑盒测试进行测试时,我应该避免使用 Di 吗?

java - 如何为下载管理器编写测试驱动的 Java 类?

architecture - 何时从头开始重写代码库

php - 关于如何在 PHPUnit 中使用 setUp() 和 tearDown() 的真实示例?

unit-testing - 如何制作用于测试的扩展入口决策表

java - 使用 Powermockito 模拟最终类的本地对象创建

winforms - Windows 窗体测试自动化

unit-testing - 运行使用 "Cannot use setInterval from within an async zone test"调用 setTimeout 错误的 Angular2 测试