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