9

我想为 JUnit4 测试方法创建一个 Java 代码模板(Preferences -> Java -> Editor -> Templates),该方法还应该包括一个静态导入以使用一些 hamcrest 匹配器。

${:importStatic('org.hamcrest.MatcherAssert.*')}
${:import(org.junit.Test)}
@Test
public void ${testName}() throws Exception {    
    ${cursor} 
}

我无法保存代码模板 - 显示错误消息:

模板变量 '' 具有不兼容的类型。

它适用于任一 import 语句,因此语法似乎是正确的。

如何将两个导入语句组合在一起工作?

4

2 回答 2

12

这应该有效:

${imp:import(org.junit.Test)}
${impst:importStatic('org.hamcrest.MatcherAssert.*')}

@Test
public void ${testName}() throws Exception {    
    ${cursor} 
}

编辑:如果我没记错的话,第一部分充当名称变量,第二部分是类型(导入,var,...)。例如以下也行不通

${:newType(org.eclipse.swt.widgets.ExpandItem)}
if (${:var(boolean)}) {
    ${cursor}
} else {

}

您可以从我的答案中删除 imp 或 impst ,它仍然可以工作。在一个模板中,您可以对一个变量执行多个操作,一个很好的例子是 List 模板。

    ${type:newType(org.eclipse.swt.widgets.List)} ${list:newName(org.eclipse.swt.widgets.List)}= new ${type}(${parent:var(org.eclipse.swt.widgets.Composite)}, ${style:link('SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL', 'SWT.MULTI | SWT.V_SCROLL', SWT.MULTI, 'SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL', 'SWT.SINGLE | SWT.V_SCROLL', SWT.SINGLE)});
${list}.setLayoutData(new ${gridDataType:newType(org.eclipse.swt.layout.GridData)}(SWT.${horizontal:link(FILL, BEGINNING, CENTER, END)}, SWT.${vertical:link(FILL, TOP, CENTER, BOTTOM)}, ${hex:link(true, false)}, ${vex:link(true, false)}));
${list}.setItems(${word_selection}${});
${imp:import(org.eclipse.swt.SWT)}${cursor}

在这里,他们对列表变量执行多项操作

于 2013-08-09T08:56:53.923 回答
1

西蒙斯的回答对我有用。

“帮助 - Eclipse 平台”解释了静态导入,它还提供了一个示例。对于 Photon 版本,您可以在这里查看:

https://help.eclipse.org/photon/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Fconcepts%2Fconcept-template-variables.htm

于 2018-11-08T16:34:38.540 回答