我们使用SWTBot编写功能测试。测试某些用例非常困难,一些程序员直接从实现中使用类和它们的方法(例如,从类AddUserDialog调用方法)。这是一种好的方法吗?为什么?
请回答下一个问题。对于基于eclipse RCP应用程序的测试,SWTBot是否足够?写单元测试是必要的吗?
注意:我们是scrum团队。
发布于 2015-11-15 02:04:18
SWTBot和JUnit有两种不同的用途。
JUnit
顾名思义,JUnit是用于单元测试的。单元测试应该很小,执行起来也很快。它们只测试单个代码单元,上面提到的属性允许在开发被测单元时经常执行它们。
但是还有更多的(好的)单元测试。您可能想要阅读以下帖子之一,以了解单元测试的更多属性:
我会更进一步地说,单元测试只有在TDD中才有意义,也就是说,在生产代码之前编写测试。否则你就忽略了测试。谁想要做额外的努力,为已经可以工作的东西编写测试。而且,即使您有必要在之后编写测试,它们也只是显示了您的生产代码的状态。然而,就像在TDD中一样,预先编写测试会导致精益生产代码,这些代码只执行测试所需的内容。但我猜这是不是每个人都会同意的。
在RCP设置中,单元测试理想情况下能够在不启动平台的情况下运行(这需要相当长的时间)。也就是说,它们不需要作为PDE JUnit测试运行,而是作为普通的JUnit测试运行。因此,测试单元应该与RCP隔离。
关于一个相关的注释,也请参见这个问题:How to efficiently JUnit test Eclipse RCP Plugins
SWTBot
虽然SWTBot使用JUnit运行时来执行测试,但它更像是一个创建集成或功能测试的实用程序。当SWTBot与RCP一起使用时,它会启动整个工作台,并在同一实例中运行所有测试。因此,应该非常小心地确保每个测试都使环境处于与测试开始前相同的状态。在这里,专门的Rules可能有助于设置和拆卸特定的重复场景。
为了设置SWTBot测试来调用应用程序中的方法,它是完全有效的。例如,您可以通过编程方式打开向导,然后使用SWTBot模拟输入数据并按下OK按钮的用户。不需要使用SWTBot来费力地打开向导本身。
根据我的经验,对于简单的用例,SWTBot甚至太多了。考虑一个测试,它应该在对话框中输入一些数据,然后按OK。如果您已经以编程方式打开了该对话框,则也可以不使用SWTBot继续:
dialog.textField.setText( "data" );
dialog.okButton.notifyListeners( SWT.Selection, null );
assertThat( dialog.getEnteredData() ).isEqualTo( "data" );两者都使用
最好的办法是同时使用单元测试和功能测试,单元测试可以确保各个单元的行为,而功能测试可以确保特定的单元可以按照需要一起运行。
不确定这是否回答了问题,如果您有进一步的问题,请留下评论。
https://stackoverflow.com/questions/33680988
复制相似问题