SWTBot与单元测试

时间:2015-11-12 20:45:24

标签: unit-testing eclipse-rcp swtbot

我们使用SWTBot编写功能测试。测试某些情况非常困难,一些程序员直接从实现中使用类及其方法(例如来自类AddUserDialog的调用方法等)。这是好方法吗?为什么?

请下一个qustion。 SWTBot足以测试基于Eclipse的RCP应用程序吗?是否有必要编写单元测试?

注意:我们是scrum团队。

1 个答案:

答案 0 :(得分:7)

SWTBot和JUnit有两个不同的用途。

JUnit的

顾名思义,JUnit用于单元测试。单元测试应该小而且快速执行。它们只测试一个代码单元,上面提到的属性允许它们在开发被测单元时经常执行。

但是还有更多(好)单位测试。您可能需要阅读以下帖子之一以获取单元测试的更多属性:

我会更进一步说单元测试只在TDD中有意义,即你在生产代码之前编写测试。否则你忽略了测试。谁想要为已经有效的事情编写测试的额外工作。即使你有纪律来编写测试,他们只是表明你的生产代码的状态。然而,像在TDD中一样,事先编写测试会导致精益生产代码只能执行测试所需的代码。 但我想这并不是每个人都会同意的事情。

在RCP设置中,理想情况下,单元测试可以在不启动平台的情况下运行(这需要相当长的时间)。即它们不需要作为 PDE JUnit Tests 运行,而是作为简单的 JUnit Tests 运行。因此,被测单元应与RCP API隔离。

在相关说明中,另请参阅此问题:How to efficiently JUnit test Eclipse RCP Plugins

了SWTBot

虽然SWTBot使用JUnit运行时来执行测试,但它更像是一个创建集成或功能测试的实用程序。 SWTBot与RCP一起使用时,启动整个工作台并在同一实例中运行所有测试。因此,应特别注意确保每个测试使环境处于与测试开始之前相同的状态。专门的Rules可能有助于设置和拆除特定的重复方案。

设置SWTBot测试以从您的应用程序调用方法是完全有效的。例如,您可以以编程方式打开向导,然后使用SWTBot模拟输入数据的用户并按下“确定”按钮。没有必要使用SWTBot来费力地打开向导本身。

根据我的经验,SWTBot对于简单的用例来说太过分了。考虑一个应该在对话框中输入一些数据然后按OK的测试。如果您已经以编程方式打开了对话框,则可以在没有SWTBot的情况下继续:

dialog.textField.setText( "data" );
dialog.okButton.notifyListeners( SWT.Selection, null );

assertThat( dialog.getEnteredData() ).isEqualTo( "data" );

同时使用

最好的办法是同时进行单元测试以确保各个单元的行为和功能测试,以确保特定单元按需要一起播放。

不确定是否回答了问题,如果您有进一步的疑虑,请发表评论。