我很擅长做任何类型的测试,但我做了一点阅读,看起来这是一个很好的方法。我喜欢只需单击按钮并确保代码库稳定的想法。只要测试通过,就可以自由地进行攻击,这非常有趣。
但是,我的软件是一个基于Windows的程序。基本上它的作用是与用户桌面上的其他窗口进行交互,并根据特定条件在屏幕上移动它们。如果可以看到XX图像,请将该窗口移动到x / y坐标。如果在该窗口上按下F9键盘快捷键,请将其移至x2 / y2坐标。等
我不知道如何进行任何类型的测试。任何帮助表示赞赏。
答案 0 :(得分:4)
既然你提到你是初学者,我会在这里添加一个提醒,你需要注意你测试的。你希望测试你的逻辑,而不是Windows。为此,您需要将您的关注点分成包含您的逻辑的类(或类),以及包含您使用的API的包装器(代理)的类 - 您不测试API。他们一直工作,直到你证明不是。
您将需要测试您的类,并存根或模拟代理。在上面的示例中,例如,如果您使用Windows API命令来提供解决方案,则可以将用于移动窗口的命令放入WindowsProxy类,并模拟调用,验证调用它们,但实际上并没有在测试中运行它们。
如果您使用的是.NET,Windows窗体或类似的框架,则需要使用支持测试的模式,例如MVP。您需要编写测试来练习演示者,同时存根或模拟查看(您的窗口)和模型(任何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这样的模拟框架,您可以轻松地存根和模拟视图,并测试演示者(所有逻辑将驻留在哪里)。使用Moq,您可以在模拟上使用测试集值下的类,然后验证它们的值(例如窗口的坐标)。
希望这会有所帮助。我花了很多时间开发基于Win-Form的自定义控件,并使用TDD开发它们。一旦掌握了它,这不是不可能的,甚至是困难的。
如果您需要进一步详细说明,请与我们联系。
阿萨弗。
答案 1 :(得分:2)
不推荐使用UnitTest窗口,因此您最好将应用程序重构为Model-View-Controller(任何类型的此模式),并独立测试Controller和Model类。
答案 2 :(得分:1)
为了对这类应用程序进行单元测试,您需要区分测试在屏幕上看到的内容,以及测试应用程序的状态。
如果我采取你的一个例子:
如果按下F9键盘快捷键 该窗口,将其移至x2 / y2
您可以构建代码,以便您可以轻松触发移动窗口的函数/方法。然后你想要询问窗口状态并确定它的位置。如果窗口状态报告它位于x2 / y2位置,那么这是一个肯定的结果。
这些类型的测试有很多价值。当然,窗口的位置总是有可能,实际出现的位置可能不匹配。因此,您仍然应该在单击按钮并查看屏幕的位置进行一些测试。你不需要像那样做所有的测试。