【问题标题】:How to TDD a JFrame?如何对 JFrame 进行 TDD?
【发布时间】:2012-05-18 06:12:31
【问题描述】:

我正在开发一个新项目,我想在屏幕上显示一些数据。我让自己使用 TDD,这对我来说是新的,但我喜欢这个想法并且到目前为止相处得很好。

我设置了一个 JFrame,添加了一个 Textarea 并将文本放在那里,但我该如何正确测试呢?还是在我这边的 TDD 上下文中这是错误的想法?我想确定(以 TDD 方式)数据正确显示!显示的文本的创建已被测试正确覆盖,但显示却没有。

这是一个完全简化的例子:

public class MyTextDisplay {
    public static void main(String[] args) {
        JFrame my_frame = new JFrame("DisplaySomeText");
        my_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextArea textArea = new JTextArea(5, 20);
        textArea.setEditable(false);

        my_frame.add(textArea);
        my_frame.setVisible(true);

        //this would be in a separate method
        textArea.append("Hello World");
    }
}

【问题讨论】:

  • 您确定要将边界测试(“单元”测试 UI)纳入您的 TDD 生命周期吗?我是TDD的大支持者,但不包括边界测试,只包括服务层和业务层的其他部分。
  • Baastian,这是一个很好的第一个问题。 +1。感谢您为此付出的努力。
  • 所以测试显示和东西应该被视为一个完全不同的话题?如前所述,我对 TDD 很陌生...
  • 我建议它是一个不同的主题——GUI 测试本身就是一头野兽。先让你的程序工作,也就是逻辑,然后再担心 GUI。这有点像关注点分离,因为它可以让您专注于手头的任务。

标签: java tdd jframe


【解决方案1】:

TDD 要求您以不同的方式思考问题。在实际为解决方案编写任何代码之前,您首先要确定要测试的内容以及测试方式。

对于 GUI,这可能会变得非常棘手,而且老实说,您的 GUI 绝不应该包含任何可能位于单独层中的逻辑。例如,显示的值应该来自与 GUI 无关但可以单独测试的对象。这允许您开发与显示(视图)分开的主要业务逻辑(模型和控制器)。这就是 MVC 模式。测试驱动开发只是意味着您在编写代码之前测试您能做的事情,并且随着您添加更多代码,更多的测试将开始通过。

我宁愿专注于我的设计,并确保生成文本值的任何内容都按预期工作。 GUI 应该是“愚蠢的”,只专注于显示或检索值,如果显示的值是否确实正确,则几乎没有任何顾虑。

众所周知,GUI 很难使用自动化工具进行测试(正确测试),我会尽可能避免这种情况,并尽可能将我的 GUI 与实际应用程序分离。然后您可以测试一次 GUI,以确保它显示应有的内容,并专注于业务逻辑,而无需对 GUI 进行连续测试,因为您不接触该代码。

【讨论】:

  • 我将尽可能地分离 GUI,暂时将其排除在我的 TDD 周期之外!谢谢
  • 绝佳选择。您的 GUI 不应包含可能干扰您的应用程序工作方式的逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多