有时候,我想念树林里的树木-那是一段令人不安的长时间。 我最近才再次意识到这一点,在无数次中键入了一个更详细的模拟表达式。 有问题的语句是doAnswer(Answer)
构造,使用涉及到的静态导入和泛型的东西进行编码总是很麻烦。
尽管我定期使用Eclipse Java模板生成例如循环,切换和其他构造,但我花了几年( 仅… )的想法自己为我每天使用的模拟表达式编写了其中的一些模板 。 毫不奇怪,事实证明,这使我的工作有所简化。 因此,我认为与感兴趣的人分享github要点可能是一个好主意。
我不会详细介绍所有模板,但将在ArgumentCapture
构造的基础上简要说明该概念。 对于后者,我几乎总是遇到一个问题,即使用驼峰式大小写结合自动完成功能会自动添加一个类型参数,之后我必须手动将其删除: 1 。
使用Java模板可以避免此问题,因为您只需键入模板名称的首字母,然后从内容助手的下拉列表中选择即可。 生成完整的代码构造,您唯一要做的就是填写变量2 :
基本上,您可以使用制表符来完成生成的构造。 如下图所示,第一个模板变量已标记并准备好进行编辑。 具有相同名称的变量将属于同一变量,并且将被同步更改(请参见图片中的泛型type // classname-variable)。 完成当前变量的操作后,请使用“ tab”键标记下一个变量。 完成整个构造后,按“ enter”跳到图像中描述为光标位置的绿色垂直线。
请注意,如果需要,模板还可以处理导入和静态导入。 最终,您将得到类似于以下测试方法摘录的第一行的内容:
尽管ArgumentCapture
构造不是很大,但我非常感谢现在有一个模板。 我可以想到的最快的打字方式(使用内容辅助,使用CRTL + 1分配给局部变量等)需要七个步骤,而此处描述的方法在四个步骤3 4中都可以做到。
最后一个示例图像显示了doAnswer(Answer)
提到的更详细的doAnswer(Answer)
构造的生成表达式将是什么样子:
为了完整起见,我在本文的结尾部分列出了要点5中可用的模板:
模板名称 | 描述 |
回答 | Mockito doAnswer(answer).when(mock).call()构造 |
doAnswerOnArgument | Mockito doAnswer(answer).when(mock).call()构造可操纵调用参数 |
doReturn | Mockito doReturn(value).when(mock).call()构造 |
扔 | Mockito doThrow(throwable).when(mock).call()构造 |
上课 | Mockito ArgumentCaptor.forClass(Type.class)构造 |
什么时候回答 | Mockito when(mock.call())。thenAnswer(answer)构造 |
whenThenAnswerOnArgument | Mockito when(mock.call())。thenAnswer(answer)构造用于操纵调用参数 |
当然后返回 | Mockito when(mock.call())。thenReturn(value)构造 |
什么时候扔 | Mockito when(mock.call())。thenThrow(throwable)构造 |
- Github Gist下载: https : //gist.github.com/fappel/8863588
如果您对其他的Mockito模板有任何想法,改进,批评,替代之类的东西,我当然会很高兴在这里提出。 所以不要害羞,试试看!
- 嗯,可以使用收藏夹和静态导入来解决该问题,例如我亲爱的Holger Staudacher在他的文章中描述的有效使用 Mockito的 方法 。 但是由于无法解释的原因,我没有使用
ArgumentCapture
将其输入我的手指中 - 'forClass'可能不是最有用的名称,但是每个人都可以自由选择一个更好的名称!
- 注意,“步进”不是指击键。 根据您的环境,实际击键次数可能会有所不同。 此外,我将不提供“步骤”一词的精确定义-我将由您自己进行比较
- 除了实际的步数,在我看来,模板方法消耗的脑力更少,但这可能完全是个人的错觉
- 高度赞赏对名称和描述的改进建议
翻译自: https://www.javacodegeeks.com/2014/02/mockito-templates-for-eclipse.html