2016-12-13 4 views
1

-TestMockito varargs Ungültige Verwendung von Argument Matcher

@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!"); 
    } 

} 

Dienst

@Service 
public class SimpleService { 

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

} 

Test nicht mit der nächsten Nachricht:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Ungültige Verwendung von Argumentmatchern! 2 Matcher erwartet, 1 aufgezeichnet:

Ich muss Int als 1. Argument und jede Menge Varargs verwenden.

Antwort

4

Wenn Sie Matcher für einen Parameter verwenden, müssen Sie ihn für alle Parameter verwenden.

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

'Mockito.eq (1)' Versuchen Sie den Trick. Vielen Dank! Ich werde Ihre Antwort in 7 Minuten akzeptieren. – Feeco

0

Sie kann nicht beide Matcher mischen und richtigen Parameter

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

kann mit dem

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

0

ersetzt werden Ich glaube, Sie Argument Matcher für sowohl die verwenden müssen Argumente, können Sie dort nicht mischen und übereinstimmen.

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