我有一个使用命令和处理程序的基于Eclipse 3.x的应用程序。
我正在提高代码覆盖率,并希望尽可能多地进行测试。我已经学会了如何测试简单案例(POJO)。但是,在某些情况下,我找不到很好的起点,尤其是在创建灯具时。
例如:Eclipse命令处理程序。我有一个处理程序类MyHandler
扩展org.eclipse.core.commands.AbstractHandler
。它只有一个方法public Object execute(ExecutionEvent event) throws ExecutionException
。通常,它event
是通过GUI中的用户操作(例如,单击菜单项)传递的。
如何进行单元测试?我需要嘲笑的ExecutionEvent
带着嘲弄的框架的帮助?
除非不可避免,否则我只喜欢模拟自己拥有的类型。请参阅此处的讨论,您是否应该只拥有自己的模拟类型?
由于ExecutionEvent
可以轻松创建s,因此我不会嘲笑它们。下面的代码段创建了一个事件,您可以将其传递给处理程序的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事件(如果可用)。null
如果您的生产代码不对其进行评估,则将其保留。
在调用execute之前,您可能需要准备以下变量context
:
context.addVariable( ISources.ACTIVE_PART_NAME, myPart );
context.addVariable( ISources.ACTIVE_CURRENT_SELECTION_NAME, new StructuredSelection() );
请注意,null
不允许将其作为变量值。忽略呼叫,或者-如果已添加,请使用removeVariable()
。
如果您不需要命令(请参见上文),并且您的生产代码当然不需要工作台,则您甚至可以将测试作为纯JUnit测试(而不是PDE JUnit测试)运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句