我有一个基于 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/