mik*_*kew 5 testing tdd unit-testing
我很擅长做任何类型的测试,但我做了一点阅读,看起来这是一个很好的方法.我喜欢只需单击按钮并确保代码库稳定的想法.只要测试通过,就可以自由地进行攻击,这非常有趣.
但是,我的软件是基于Windows的程序.基本上它的作用是与用户桌面上的其他窗口进行交互,并根据特定条件在屏幕上移动它们.如果可以看到XX图像,请将该窗口移动到x/y坐标.如果在该窗口上按下F9键盘快捷键,请将其移至x2/y2坐标.等等.
我不知道如何进行任何类型的测试.任何帮助表示赞赏.
既然你提到你是一个初学者,我会在这里添加一个提醒,你需要小心你测试的内容。您希望测试您的逻辑,而不是窗口。为了做到这一点,您需要将您的关注点分成包含逻辑的类(或多个类),以及包含您使用的 API 的包装器(代理)的类 - 您不测试 API。它们会起作用,直到你证明并非如此。
您将需要测试您的类,并存根或模拟代理。在上面的示例中,如果您使用 Windows API 命令来交付解决方案,您将把移动窗口的命令放入 WindowsProxy 类中,并模拟调用,验证对它们的调用是否已进行,但并未在测试中实际运行它们。
如果您使用 .NET、Windows-Forms 或某些类似的框架,您将需要使用支持测试的模式,例如MVP。您需要编写测试来练习Presenter,同时存根或模拟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;
}
}
Run Code Online (Sandbox Code Playgroud)
使用像Moq这样的模拟框架,您可以轻松地存根和模拟视图,并测试演示者(所有逻辑都将驻留在其中)。使用 Moq,您可以让被测试的类在模拟上设置值,然后验证它们的值(例如窗口的坐标)。
希望这可以帮助。我花了很多时间开发基于 Win-Form 的自定义控件,并使用 TDD 来开发它们。一旦掌握了窍门,这并不是不可能的,甚至不是困难的。
如果您需要进一步说明,请告诉我。
阿萨夫。