【问题标题】:Automatic testing of GUI related private methodsGUI相关私有方法的自动测试
【发布时间】:2011-01-31 18:51:19
【问题描述】:

谈到 GUI 编程(至少对于 Web 而言),我觉得通常唯一对单元测试有用的是一些私有方法*。虽然单元测试对后端代码非常有意义,但我觉得它不太适合 GUI 类。

添加这些自动测试的最佳方法是什么?


* 为什么我认为唯一有用的测试方法是私有的:

通常,当我编写 GUI 类时,除了构造函数之外,它们甚至没有任何公共方法。公共方法(如果有的话)是微不足道的,构造函数完成了调用私有方法的大部分工作。

他们从服务器接收一些数据并进行大量琐碎的输出并将数据提供给其中包含的其他类的构造函数,添加调用(或多或少直接)调用服务器的侦听器......其中大部分都很简单(最难的部分是布局:css、IE 等)但有时我会创建一些私有方法来执行一些高级技巧,我绝对不希望公开可见(因为它紧密耦合到布局的实现,并且可能会改变),但足够复杂而无法破解。这些通常仅由构造函数调用或由代码中的事件重复调用,根本不被任何公共方法调用。

我想有一种方法来测试这种类型的方法,而不是将其公开或诉诸反射技巧。

(顺便说一句:我目前正在使用 GWT,但我觉得这适用于我在为 GUI 编码时使用的大多数语言/框架)

【问题讨论】:

  • 我知道已经有很多关于单元测试私有方法的问题,但我发现没有人关注 gui...

标签: unit-testing user-interface language-agnostic


【解决方案1】:

与其坚持一切都必须是私有的,不如考虑采用许多与 UI 相关的设计模式中的一种,例如 MVCMVPMVVM

您的 UI 会将所有逻辑委托给具有公共成员的可测试 UI/Presentation-特定类。这些实现不会污染您的核心领域模型,因为它们仍然是特定于 UI 的,并且可以在单独的库中实现。

您可以根据自己的喜好对这样的 Presentation 库进行单元测试,也可以使用它来执行Subcutaneous Tests

【讨论】:

  • 好的,很好的答案。但是我觉得奇怪的是,单元测试应该要求你违反信息隐藏的原则。
  • 我不知道这个原则,但是单元测试完全符合 SOLID 原则;特别是 SRP 和 OCP。
猜你喜欢
  • 2011-07-21
  • 2010-09-18
  • 1970-01-01
  • 2010-09-10
  • 2010-10-23
  • 2012-04-07
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多