Mockito for int primitive

2022-09-01 05:55:45

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


答案 1

对于 和 的基元类型参数,您可能遇到一些问题。这些以对象为中心的方法正确地完成了副作用的工作,但它们往往会返回一个虚拟返回值,这不适用于通过自动装箱打开包装基元的Java。anyargThatwhenverifynull

幸运的是,该类具有以原始为中心的方法的完整补充(我在这里列出了这些方法):org.mockito.ArgumentMatchersint

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

ArgumentMatchers 类的文档中查看所有它们


答案 2

我知道这个问题已经超过4年零8个月了,但为了从今天开始明确的解决方案,我发布这个

在我的情况下,要测试的方法签名是

public SomeObject create(String code, int status)

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

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

如果我使用 argThat,即使对于 int(或任何基元类型),那么 mockito 就会抛出 NPE

目前我正在使用org.mockito:mockito-core:jar:2.15.0,考虑到提出问题的时间,这肯定是先进的!但想到这可能对人们有帮助...谢谢


推荐