2016-09-30 65 views
2

我有静态方法,我想捕捉可变参数如何捕获可变参数

Executor ex = new Executor(); 
ex.execute(String nodeName, boolean status, Property ... properties); 

ArgumentCaptor<Property> propertyCaptor = ArgumentCaptor.forClass(Property.class); 
verify(ex).execute(anyString(), anyBoolean(), propertyCaptor.capture); 

propertyCaptor .getValue() - 不起作用????

+1

“Property ...”的类是'Property [] .class' –

回答

1

我不知道你想考什么,但以下工作:

class SpecialExecutor implements Executor { 
     @Override 
     public void execute(Runnable command) { 

     } 

     public void execute(String nodeName, boolean status, Property... properties) { 

     } 
    }; 

    @Test 
    public void test() { 
     SpecialExecutor ex = new SpecialExecutor(); 

     ArgumentCaptor<Property> propertyCaptor = ArgumentCaptor.forClass(Property.class); 
     verify(ex).execute(anyString(), anyBoolean(), any(Property[].class)); 
    } 
+0

您是否运行过此代码?这项工作如果你有案例:一个可变参数,但如果你有> 1个参数,这是行不通的。 –

0

在你需要使用getAllValues(),而不是像getValue()ArgumentCaptor的Javadoc的示例varargs的情况下, :

//capturing varargs: 
ArgumentCaptor<Person> varArgs = ArgumentCaptor.forClass(Person.class); 
verify(mock).varArgMethod(varArgs.capture()); 
List expected = asList(new Person("John"), new Person("Jane")); 
assertEquals(expected, varArgs.getAllValues()); 

所以你的情况将是:

ArgumentCaptor<Property> propertyCaptor = ArgumentCaptor.forClass(Property.class); 
verify(ex).execute(anyString(), anyBoolean(), propertyCaptor.capture()); 
assertEquals(expected, propertyCaptor.getAllValues()); 
+0

它不起作用! –