Java Junit和MessageBox

Java Junit和MessageBox,java,junit,junit4,Java,Junit,Junit4,我是JUnit新手,我得到了一个示例java项目,其中我需要为所有方法编写单元测试。 不幸的是,代码设计得很糟糕,有些方法是从UI完成的。此外,有些方法会弹出一个messagebox,并且不返回返回值 我有两个问题:首先,在不修改现有代码的情况下,是否有一种方法可以在每次运行单元测试时抑制消息框而不按enter键 第二个问题:测试函数是否可以预期消息框并在其字符串内容上断言failure\success 我非常感谢任何帮助,我知道最好的解决方案是修复代码本身——将业务逻辑与UI完全分离,并测试预

我是JUnit新手,我得到了一个示例java项目,其中我需要为所有方法编写单元测试。 不幸的是,代码设计得很糟糕,有些方法是从UI完成的。此外,有些方法会弹出一个messagebox,并且不返回返回值

我有两个问题:首先,在不修改现有代码的情况下,是否有一种方法可以在每次运行单元测试时抑制消息框而不按enter键

第二个问题:测试函数是否可以预期消息框并在其字符串内容上断言failure\success

我非常感谢任何帮助,我知道最好的解决方案是修复代码本身——将业务逻辑与UI完全分离,并测试预期结果,或者即使消息框是强制性的,也可以使用模式消息框(如简陋的对话框),但不幸的是,我不允许更改代码中的任何内容

谢谢:)

尼利


Google上有很多关于如何用JUnit自动化Swing测试的东西。不幸的是,在测试时无法回避这个问题。

如果只允许编辑代码,就有各种各样的方法可以开始,因此我的第一个方法是看看是否可以放宽这个限制,然后阅读


如果失败,您可以尝试使用GUI测试框架检查消息框的内容是否符合预期。

不允许更改代码,您说?首先,我想看看,当您被编写的代码严重限制时,哪些代码真正打开了许多可能性,而这些代码并没有太多地考虑如何测试它。它应该使您能够在不修改任何代码的情况下,在测试运行时替换麻烦部件的首选实现——因此,只有在测试上下文中,您才会更改测试主题(小心编写有意义的测试!)或其依赖项。其他模拟对象框架也可能很有用,但学习JMockit的投资确实花了很多时间。

如果您有一些不好的代码需要测试,但不允许修复,请寻找工作更改。你在为白痴工作。我们是在谈论Swing UI吗?Web应用程序/JSP?它实际上并不影响大致的答案,但细节可能会有所不同。@Joachim,SwingUI@唐,你完全正确:)
unfortunately I am not allowed to change anything in the code.