eclipse - 如何对 Eclipse 命令处理程序进行单元测试?

标签 eclipse unit-testing mocking eclipse-rcp fixtures

我有一个基于 Eclipse 3.x 的应用程序,它使用命令和处理程序。

我正在提高代码覆盖率,并希望尽可能多地进行测试。我已经学会了如何测试的简单案例 (POJO)。但是,有些情况下我找不到好的起点,尤其是在创建夹具时。

例如:Eclipse 命令处理程序。我有一个处理程序类 MyHandler延伸 org.eclipse.core.commands.AbstractHandler .它只有一个方法 public Object execute(ExecutionEvent event) throws ExecutionException .通常,event从 GUI 中的用户操作传入,例如,单击菜单项。

我如何进行单元测试?我需要模拟 ExecutionEvent在模拟框架的帮助下?

最佳答案

除非不可避免,我更喜欢只模拟我拥有的类型。有关 Should you only mock types you own? 的讨论,请参见此处

ExecutionEvent可以轻松创建 s,我不会 mock 它们。下面的代码段创建了一个事件,您可以将其传递给处理程序的 execute 方法。

IEvaluationContext context = new EvaluationContext( null, new Object() );
Map<String, String> parameters = new HashMap<>();
ExecutionEvent event = new ExecutionEvent( null, parameters, null, context );
ExecutionEvent的第一个参数构造函数引用命令 - 我从来没有用过它。如果您的代码需要实际命令,您可以使用 ICommandService获取对您的命令的引用:

ICommandService commandService = ...
Command command = commandService.getCommand( "id.of.my.command" );

第二个参数是命令参数的映射。第三个参数是触发器。如果是 Eclipse 工作台,这是 SWT Event如果可供使用的话。留下 null如果您的生产代码未对其进行评估。

在调用 execute 之前,您可能希望准备 context 的变量。 :

context.addVariable( ISources.ACTIVE_PART_NAME, myPart );
context.addVariable( ISources.ACTIVE_CURRENT_SELECTION_NAME, new StructuredSelection() );

请注意 null不允许作为变量值。要么省略调用,要么 - 如果已经添加,使用 removeVariable() .

如果您不需要命令(见上文) - 当然您的生产代码不需要工作台 - 您甚至可以将测试作为普通 JUnit 测试(而不是 PDE JUnit 测试)运行。

关于eclipse - 如何对 Eclipse 命令处理程序进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34182727/

相关文章:

java - NullPointerException 引起的 UmbrellaException

java - eclipse 中的 jboss-web.xml 验证错误

eclipse - JBoss 服务器没有得到更改

unit-testing - 注入(inject)没有java接口(interface)的模拟对象进行单元测试

java - Groovy 模拟文件构造函数,验证写入新创建的文件

c# - 通过 USB 连接模拟设备

java - Eclipse 测试运行在与构建目录不同的目录中查找类

unit-testing - 集成在 Leksah 中的 Haskell 单元测试

ios - XCTest 不链接 iOS 框架

unit-testing - 模拟框架与功能测试,为什么还要进行模拟呢?