如何使用 TDD 测试 JFrame?

7
我正在开发一个新项目,希望在屏幕上显示一些数据。我开始使用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的坚定支持者,但不包括边界测试,只包括服务层和业务层的其他部分。 - raphaëλ
Baastian,这是一个很好的第一个问题。+1。感谢您付出了努力。 - jamesmortensen
那么测试显示和其他东西应该被视为完全不同的主题吗?如前所述,我对TDD还很陌生... - Bastian Doeen
我建议选择一个不同的主题 - GUI测试是一个独立的大问题。首先让你的程序正常工作,也就是逻辑部分,然后再考虑GUI。这有点像关注点分离,因为它允许你专注于手头的任务。 - Ewald
1个回答

5
TDD要求你以稍微不同的方式思考。在编写任何解决方案的代码之前,你需要先确定要测试什么,以及如何测试它。
对于GUI来说,这可能会变得非常棘手,老实说,你的GUI不应该包含任何可以放在单独层中的逻辑。例如,显示的值应该来自一个与GUI无关的对象,但是可以单独测试。这使你可以将主要业务逻辑(模型和控制器)与显示(视图)分开开发。这就是MVC模式。测试驱动开发只是意味着在编写代码之前尽可能多地进行测试,随着添加更多代码,越来越多的测试将开始通过。
我更愿意专注于我的设计,并确保生成文本值的任何内容都按预期工作。GUI应该是“笨”的,只关注显示或检索值,几乎不关心显示的值是否正确。
由于GUI很难使用自动化工具进行适当的测试,我会尽量避免这种情况,并尽可能将GUI与实际应用程序解耦。然后,你可以进行一次GUI测试,以确保它显示了应该显示的内容,并集中精力处理业务逻辑,而无需对GUI进行连续测试,因为你不会触及那段代码。

我会尽可能将GUI与TDD循环分开,并暂时将其排除在外!谢谢 - Bastian Doeen
很好的选择。您的GUI不应包含可能干扰应用程序工作方式的逻辑。 - Ewald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接