Mockito for int primitive

时间:2014-02-24 06:48:15

标签: java mockito

如果我使用Wrapper类类型变量作为参数Mockito测试用例正在通过但是, 如何为int原语类型变量编写Mockito测试用例,这是ServiceImpl中方法的参数。

2 个答案:

答案 0 :(得分:42)

对于anyargThat的原始类型参数,whenverify可能会遇到一些问题。这些以对象为中心的方法可以正确地处理副作用,但是它们倾向于返回null的虚拟返回值,这对于通过自动装箱的Java解包原语不起作用。

幸运的是,org.mockito.ArgumentMatchers类有完整的以原始为中心的方法(我在这里列出了int方法):

static int anyInt()
static int eq(int value)
static int intThat(org.hamcrest.ArgumentMatcher<java.lang.Integer> matcher)

documentation for the ArgumentMatchers class上查看所有内容。

答案 1 :(得分:2)

我知道这个问题已经存在了4年8个月了,但是为了使 今天 的问题得到清晰的解决,我将发布此

就我而言,要测试的方法签名是

public SomeObject create(String code, int status)

因此调用该方法时用于验证参数值的测试代码将遵循

verify(this.service).create(
        argThat(code -> "dummy_code".equals(code)),
        intThat(status -> status == 105));

如果即使对于int(或任何原始类型),我都使用 argThat ,则模仿会抛出NPE

当前,我正在使用 org.mockito:mockito-core:jar:2.15.0 ,考虑到提出问题的时间,该功能必须已经进行了改进!但是认为这可能对人们有所帮助...谢谢,