除非不可避免,我更喜欢只模拟我拥有的类型。有关Should you only mock types you own?的讨论,请参见此处
因为ExecutionEvents 可以轻松创建,所以我不会嘲笑它们。下面的 sn-p 创建一个事件,您可以将其传递给处理程序的 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 测试)运行。