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

mik*_*kew 5 testing tdd unit-testing

我很擅长做任何类型的测试,但我做了一点阅读,看起来这是一个很好的方法.我喜欢只需单击按钮并确保代码库稳定的想法.只要测试通过,就可以自由地进行攻击,这非常有趣.

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

我不知道如何进行任何类型的测试.任何帮助表示赞赏.

Ass*_*one 4

既然你提到你是一个初学者,我会在这里添加一个提醒,你需要小心你测试的内容。您希望测试您的逻辑,而不是窗口。为了做到这一点,您需要将您的关注点分成包含逻辑的类(或多个类),以及包含您使用的 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 来开发它们。一旦掌握了窍门,这并不是不可能的,甚至不是困难的。

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

阿萨夫。