关于java:如何让方法返回传递给它的参数?

How can I make a method return an argument that was passed to it?

考虑方法签名,例如:

1
public String myFunction(String abc);

Mockito帮助是否可以返回与方法接收到的字符串相同的字符串?


你可以用mockito创建一个答案。假设我们有一个名为application的接口,它带有一个方法myfunction。

1
2
3
public interface Application {
  public String myFunction(String abc);
}

下面是mockito答案的测试方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
public void testMyFunction() throws Exception {
  Application mock = mock(Application.class);
  when(mock.myFunction(anyString())).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) throws Throwable {
      Object[] args = invocation.getArguments();
      return (String) args[0];
    }
  });

  assertEquals("someString",mock.myFunction("someString"));
  assertEquals("anotherString",mock.myFunction("anotherString"));
}

由于Mockito 1.95和Java 8,使用lambda函数有更简单的方法:

when(myMock.myFunction(anyString())).thenAnswer(i -> i.getArguments()[0]);


如果您有mockito 1.9.5或更高版本,那么有一个新的静态方法可以使Answer为您对象。你需要写一些像

1
2
3
4
import static org.mockito.Mockito.when;
import static org.mockito.AdditionalAnswers.returnsFirstArg;

when(myMock.myFunction(anyString())).then(returnsFirstArg());

或者

1
doAnswer(returnsFirstArg()).when(myMock).myFunction(anyString());

注意,returnsFirstArg()方法在AdditionalAnswers类中是静态的,这对于mockito 1.9.5是新的;因此您需要正确的静态导入。