gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:03:51 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com