如何测试作为参数传递给另一个方法中的方法的值(Java单元测试)?
例如:如何测试作为参数传递给另一个方法中的方法的值(Java单元测试)?,java,unit-testing,mockito,Java,Unit Testing,Mockito,例如: public class myClass { private WebService webService; public void process(String delimitedString) { String[] values = StringUtils.split(delimitedString, "$%"); insideMethod.setFirstName(values[0]); insideMethod.setMiddleName(values[1
public class myClass {
private WebService webService;
public void process(String delimitedString) {
String[] values = StringUtils.split(delimitedString, "$%");
insideMethod.setFirstName(values[0]);
insideMethod.setMiddleName(values[1]);
insideMethod.setLastName(values[2]);
insideMethod.setBirthDate(values[3]);
webService.getResponseWS(insideMethod.getFirstName,
insideMethod.getMiddleName,
insideMethod.getLastName,
insideMethod.getBirthDate);
}
}
我想测试insideMethod
中是否设置了正确的值,以确保将正确的参数传递给webService.getResponseWS()
这是用Java编写的,我应该使用单元测试和Mokito
注意:我不是在测试webService
方法。我需要测试传递给insideMethod
的值是否正确。示例“John”表示名称,而不是“JohnSm”或“John$%”
到目前为止,我已经创建了一个测试类,实例化了正在测试的类,并模拟了webService类
public class TestClass {
MyClass myClass = new MyClass();
private WebService webService = mock(WebService.class);
public void processTest() {
when(webService.getResponseWS()).thenCallRealMethod();
insideMethod.process("John$%J$%Smith$%02-02-1990");
你想用
JavadocAOR列出了许多示例 如果您已经正确地设置了Mockito并注入了mock,那么以下应该可以工作(尽管我手头没有编译器或JVM可供检查)
您可以在setter和调用webservices之间放置一些
assert
语句,并删除when()
调用。您特别不希望它调用真正的方法。
verify(webService).getResponseWS("John", "J", "Smith", "02-02-1990");
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class TestClass {
@Mock
private WebService webService;
private MyClass myClass = new MyClass();
@Test
public void processTest() {
// inject webService mocked instance into myClass instance, either with a setter
myClass.setWebService(webService);
// or using Mockito's reflection utils if no setter is available
//Whitebox.setInternalState(myClass, "webService", webService);
// call the method to be tested
String input = "input"; // whatever your input should be for the test
myClass.process(input);
// verify webService behavior
verify(webService).getResponseWs(
"expectedInput1", "expectedInput2", "expectedInput3", "expectedInput4");
}
}