2012-04-18 1 views
14

Я пытаюсь использовать аргументы аргументов внутри вызова при вызове метода, который имеет переменное количество аргументов (... вещь на Java) без успеха. Мой код ниже, и я также перечислил все строки, которые я пытался использовать, чтобы сделать эту работу.Mockito использование аргументов для вызова при вызове метода с переменным числом аргументов

import static org.mockito.Mockito.*; 

public class MethodTest { 
    public String tripleDot(String... args) { 
     String sum = ""; 
     for (String i : args) { 
      sum += i; 
     } 
     System.out.println(sum); 

     return sum; 
    } 

    public static void main(String[] args) { 
     try{ 
      MethodTest mt = mock(MethodTest.class); 
      when(mt.tripleDot((String[])anyObject())).thenReturn("Hello world!"); 
      System.out.println(mt.tripleDot(new String[]{"1","2"})); 
     } 
     catch (Exception e) { 
      System.out.println(e.getClass().toString() + ": " + e.getMessage()); 
     } 
    } 
} 

Если оператор печати является:

System.out.println(mt.tripleDot(new String[]{"1"})); 

или

System.out.println(mt.tripleDot("1")); 

Он будет печатать "Привет мир".

Но если оператор печати:

System.out.println(mt.tripleDot(new String[]{"1","2"})); 

или

System.out.println(mt.tripleDot("1","2")); 

Он будет печатать "нуль".

Я также пробовал делать изменения во время вызова, такие как anyObject() или anyString(), но безрезультатно. Я не уверен, может ли Mockito обрабатывать использование аргументов аргументов в отношении вызовов методов, которые включают переменное количество аргументов. Возможно ли это? Если да, то что я должен делать, чтобы сделать эту работу?

ответ

30

Попробуйте установить anyVararg(). Это было введено в 1.8.1.

+0

Я чувствую себя таким смущенным прямо сейчас. Спасибо за указание на это. – Andrew

+2

@ Андрей, Не волнуйся .. это происходит со всеми нами. Вот как мы учимся. : D – user1329572

+3

Мне понадобилась дополнительная минута, чтобы найти правильный синтаксис: 'Matchers. anyVararg() ' – jan

4

Попробуйте Mockito.anyVararg(). Он должен работать.