Mockito varargs对参数匹配器的使用无效

时间:2016-12-13 12:35:17

标签: java mockito

测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MockabstractionApplication.class)
public class SimpleTest {

    @SpyBean
    private SimpleService spySimpleService;

    @Before
    public void setup() {
        initMocks(this);
    }

    @Test //fails
    public void test() throws Exception {
        when(spySimpleService.test(1, Mockito.<String>anyVararg())).thenReturn("Mocked!");
    }

}

服务

@Service
public class SimpleService {

    public String test(int i, String... args) {
        return "test";
    }

}

测试失败,显示下一条消息:

  

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:   参数匹配器的使用无效! 2匹配预期,1记录:

我必须使用int作为第一个参数和任何数量的varargs。

3 个答案:

答案 0 :(得分:4)

如果您将匹配器用于一个参数,则必须将其用于所有参数。

when(spySimpleService.test(Mockito.eq(1), Mockito.<String>anyVararg())).thenReturn("Mocked!");

答案 1 :(得分:0)

你不能混合匹配器和适当的参数

spySimpleService.test(1, Mockito.<String>anyVararg())

可以替换为

spySimpleService.test(anyInt(), Mockito.<String>anyVararg())

答案 2 :(得分:0)

我认为你需要使用参数匹配器两个参数,你不能在那里混合和匹配。

尝试

@Test //fails
public void test() throws Exception {
    when(spySimpleService.test(anyInt(), Mockito <String>anyVararg())).thenReturn("Mocked!");
}