Tôi có một công cụ dòng lệnh thực hiện kiểm tra DNS. Nếu kiểm tra DNS thành công, lệnh sẽ tiếp tục với các tác vụ tiếp theo. Tôi đang cố gắng viết bài kiểm tra đơn vị cho việc này bằng Mockito. Đây là mã của tôi:
public class Command() {
// ....
void runCommand() {
// ..
dnsCheck(hostname, new InetAddressFactory());
// ..
// do other stuff after dnsCheck
}
void dnsCheck(String hostname, InetAddressFactory factory) {
// calls to verify hostname
}
}
Tôi đang sử dụng InetAddressFactory để giả định một triển khai tĩnh của InetAddress
lớp. Đây là mã cho nhà máy:
public class InetAddressFactory {
public InetAddress getByName(String host) throws UnknownHostException {
return InetAddress.getByName(host);
}
}
Đây là trường hợp thử nghiệm đơn vị của tôi:
@RunWith(MockitoJUnitRunner.class)
public class CmdTest {
// many functional tests for dnsCheck
// here's the piece of code that is failing
// in this test I want to test the rest of the code (i.e. after dnsCheck)
@Test
void testPostDnsCheck() {
final Cmd cmd = spy(new Cmd());
// this line does not work, and it throws the exception below:
// tried using (InetAddressFactory) anyObject()
doNothing().when(cmd).dnsCheck(HOST, any(InetAddressFactory.class));
cmd.runCommand();
}
}
Ngoại lệ khi chạy testPostDnsCheck()
thử:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
2 matchers expected, 1 recorded.
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
Bất kỳ đầu vào về làm thế nào để giải quyết điều này?