【发布时间】:2019-09-11 09:21:38
【问题描述】:
我有以下代码:
public byte[] myFunction(String s1, String s2, String s3) {
try {
URL myUrl = new URL("https://myUrl");
HttpsURLConnection connection = (HttpsURLConnection) myUrl.openConnection();
connection.connect();
int responseCode = connection.getResponseCode();
String lastPacket = connection.getHeaderField("LastPacket");
byte fileContent[] = IOUtils.toByteArray((InputStream) connection.getInputStream());
return fileContent;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
我想对上面的代码进行单元测试。 所以我使用 MockitoJUnitRunner 编写了 JUnit:
@RunWith(MockitoJUnitRunner.class)
public class EvmlSeviceImplTest {
@Mock
private URL url;
@Mock
private HttpsURLConnection httpsURLConnection;
@InjectMocks
private MyClass myClass;
@Before
public void preSetup() {
try {
Mockito.doReturn(httpsURLConnection).when(url).openConnection();
Mockito.doReturn(200).when(httpsURLConnection).getResponseCode();
Mockito.doReturn("-1").when(httpsURLConnection).getHeaderField("LastPacket");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testMyFunction() {
myClass.myFunction("my", "dummy", "data");
}
}
但这里的问题是 URL 是最终类,而 Mockito 无法监视最终类。既然我们使用的是 MockitoJUnitRunner,那该怎么做呢?
我遇到了异常:
org.mockito.exceptions.base.MockitoException:无法模拟/监视类 java.net.URL
【问题讨论】:
-
像你mock其他的一样mock最后一堂课,有什么问题,具体解释一下。
-
我已经模拟了最终类的 URL,如上面的代码所示。我遇到了异常:
Cannot mock/spy class java.net.URL -
您使用的是 Mockito 2.0 ??对吗??
-
@VishwaRatna 是的