안녕하세요, 지난 몇일 동안이나 벽돌 벽을 치려고 노력했습니다. 이 코드를 단위 테스트 해 봅니다. 그러나 EasyMock을 사용해야하는지 아닌지 확실하지 않습니까 ?? 온라인에서 몇 가지 예를 볼 수 있지만 오래된 기술을 사용하는 것 같습니다. 의 URL이 유효을 확인하고이 방법을 조롱하려는 경우 T 또는 F.URL 연결에서 JUnit 테스트, EasyMock을 사용 하시겠습니까?
답변
필자는 항상 조롱 테스트를 유지하고 전체 목적을 달성하기 어려울 수 있으므로 가능한 한 많이 피할 수 있음을 관찰했습니다.
내 제안은 JUnit 자체에서 로컬 시스템에 임시 서버를 만드는 것입니다. JUnit 시작시 Java 소켓을 사용하여 서버를 만들 수 있습니다 (10-15 줄 이상의 코드가 필요하지 않음). 그런 다음 코드에서 로컬 서버의 URL을 전달합니다. 이렇게하면 조롱을 줄이고 코드 커버리지를 극대화 할 수 있습니다. 이 같은
뭔가 -
public class SimpleServer extends Thread {
public void run() {
try {
serverSocket = new ServerSocket(port);
while (true) {
Socket s = serverSocket.accept();
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
serverSocket = null;
}
}
}
을 반환에
public boolean verifyConnection(final String url) {
boolean result;
final int timeout = getConnectionTimeout();
if (timeout < 0) {
log.info("No need to verify connection to client. Supplied timeout = {}", timeout);
result = true;
} else {
try {
log.debug("URL: {} Timeout: {} ", url, timeout);
final URL targetUrl = new URL(url);
final HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection();
connection.setConnectTimeout(timeout);
connection.connect();
result = true;
} catch (ConnectException e) {
log.warn("Could not connect to client supplied url: " + url, e);
result = false;
} catch (MalformedURLException e) {
log.error("Malformed client supplied url: " + url, e);
result = false;
} catch (IOException e) {
log.warn("Could not connect to client supplied url: " + url, e);
result = false;
}
}
return result;
}
그것은 단지 내가 URL이 아닌 문자열을 전달 권하고 싶습니다,의을. 메소드가 필요로하는 URL을 만들지 마라. 클라이언트가 당신을 위해 URL을 생성하고 전달하도록하십시오. 그러면 테스트가 필요하다면 테스트가 가짜로 대체 될 수 있습니다.
거의 의존성 주입 아이디어입니다. 메소드에 의존성을 부여하고 자체적으로 작성하지 않아야합니다. "new"에 대한 호출은 죽은 공짜입니다.
과감한 변화가 아닙니다. 메서드를 오버로드하고 URL 문자열을 허용하는 서명과 URL 자체를 받아들이는 서명의 두 가지 서명이있을 수 있습니다. 첫 번째 방법으로 URL을 만들고 두 번째 방법을 호출하십시오. 그런 식으로 테스트 할 수 있으며 편의상 API에 String 서명이있는 메서드를 사용할 수 있습니다.
는 HttpURLConnection의의 모의 구현을 설정하려고합니다. 마찬가지로
public class MockHttpURLConnection extends HttpURLConnection {
'
' protected HttpURLConnection createHttpURLConnection(URL url)
throws IOException {
return (HttpURLConnection) url.openConnection();
}
그래서이처럼 보이는 뭔가를 테스트 오버라이드 (override)하는 클래스에
첨가 방법 :
@Test
public void testGetContentOk() throws Exception
{
String url = "http://localhost";
MockHttpURLConnection mockConnection = new MockHttpURLConnection();
TestableWebClient client = new TestableWebClient();
client.setHttpURLConnection(mockConnection);
boolean result = client.verify(url);
assertEquals(true, result);
}
@Test
public void testDoesNotGetContentOk() throws Exception
{
String url = "http://1.2.3.4";
MockHttpURLConnection mockConnection = new MockHttpURLConnection();
TestableWebClient client = new TestableWebClient();
client.setHttpURLConnection(mockConnection);
boolean result = client.verify(url);
assertEquals(false, result);
}
/**
* An inner, private class that extends WebClient and allows us
* to override the createHttpURLConnection method.
*/
private class TestableWebClient extends WebClient1 {
private HttpURLConnection connection;
/**
* Setter method for the HttpURLConnection.
*
* @param connection
*/
public void setHttpURLConnection(HttpURLConnection connection)
{
this.connection = connection;
}
/**
* A method that we overwrite to create the URL connection.
*/
@Override
public HttpURLConnection createHttpURLConnection(URL url) throws IOException
{
return this.connection;
}
}
첫 부분에 전달하지만, 거짓 더미 테스트를 위해 진정한지고 , 피드백에 대한 감사의 말, 지금까지 최고의 사이트를 찾았습니다. 올바른 방법으로 생각하면 알려주세요.
Dave, 질문에 대한 응답으로 답변을 추가하지 마십시오. – duffymo
- 1. JUnit 클래스를 특수 테스트 패키지로 분리 하시겠습니까?
- 2. JUnit 혼동 : 'extends TestCase'또는 '@Test'를 사용 하시겠습니까?
- 3. Maven : JUnit 테스트 도움말 사용 필요
- 4. 봄철 JUnit 테스트
- 5. 다른 JUnit 테스트 클래스에서 JUnit 테스트 클래스 실행
- 6. JUnit 테스트 케이스에 추가 테스트 추가
- 7. NetBeans의 GWT JUnit 테스트
- 8. JUnit 테스트 종료
- 9. JUnit 명령 줄 테스트
- 10. 테스트 접근법 - DB, Junit
- 11. Junit REST 테스트?
- 12. 이클립스에서의 원격 JUnit 테스트
- 13. 웹 드라이버 junit 테스트
- 14. JUnit 테스트 내가 주석
- 15. JUnit 테스트 그룹화
- 16. eclipse에서 JUnit 테스트 제외
- 17. Junit 테스트 방법
- 18. 프로그램의 JUnit 테스트 결과
- 19. JUnit 테스트 - 테스트는 무엇입니까?
- 20. JUnit 테스트 구성
- 21. Junit 테스트 클래스의 Javadoc?
- 22. JUnit : 동시 테스트 실행
- 23. JUNIT OSB 서비스 테스트
- 24. 동적 Junit 테스트
- 25. Java Junit 테스트 문제
- 26. JUnit 무작위화된 테스트 방법
- 27. mockobjects로 junit 테스트
- 28. Android에서 junit 테스트 재사용
- 29. 컬렉션에 대한 JUnit 테스트
- 30. FEST를 사용한 여러 JUnit 테스트
이 방법을 테스트 하시겠습니까, 아니면 다른 방법을 테스트하고이 방법의 혁신을 조롱해야합니까? – Ralph