설명이 필요한 메모리 관리/메모리 누수에 대한 질문이 있습니다.유닛 테스트 중 객체 보존 최소화
설정 : 내가 HttpServletRequest의와 HttpResponse에 객체를 취 일부 서블릿 코드를 테스트하고
참조 HttpServletRequest의 #의 getParameter (문자열), HttpServletRequest의 # 대해 getHeader (문자열)와 HttpServletRequest의 #의 getAttribute (문자열).
서블릿 코드에 대한 단위 테스트를 작성하고 있습니다. 테스트를 허용하기 위해 HttpServletRequest 및 HttpServletResponse에 대한 테스트를 허용하는 스텁을 만들었습니다. 내 단위 테스트에서
public final class HttpServletRequestStub implements HttpServletRequest {
private Map<String, String> parameterMap = new HashMap<String, String>();
private Map<String, String> headerMap = new HashMap<String, String>();
private Map<String, String> attributeMap = new HashMap<String, String>();
public void setParameter(String param, String value) {
this.parameterMap.put(param, value);
}
public void setHeader(String param, String value) {
this.headerMap.put(param, value);
}
@Override
public void setAttribute(String param, String value) {
this.attributeMap.put(param, value);
}
public void flush() {
this.parameterMap.clear();
this.headerMap.clear();
this.attributeMap.clear();
}
@Override
public String getParameter (String parameter) {
return this.parameterMap.get(parameter);
}
@Override
public String getHeader(String parameter) {
return this.headerMap.get(parameter);
}
@Override
public String getAttribute(String attribute) {
return this.attributeMap.get(attribute);
}
.... Other stubbed methods
}
: 샘플 코드는 아래와 같습니다 내 질문은 메모리 관리에 관한됩니다
public class MyTest {
private MyServlet servlet;
private HttpServletRequest request;
private HttpServletResponse response;
@Before
public void setUp() throws Exception {
request = new HttpServletRequestStub();
response = new HttpServletResponseStub(); // Not in the sample code but implemented.
servlet = new MyServlet();
}
@After
public void tearDown() throws Exception {
request = null;
response = null;
servlet = null;
}
@Test
public void testFoo() throws Exception {
request.setParameter("foo", "bar");
request.setAttribute("attrib", "attrib");
request.setHeader("header", "header");
servlet.service(request, response);
}
}
. 테스트 실행 후 가짜 헤더, 요청 및 특성 맵 내용을 플러시하는 것이 필요합니까? 요청 (@After로 주석 처리 됨)에 응답 객체가 역 참조 방식으로 역 참조되는 경우 자동으로 발생합니까? 메모리 참조를 지우기 위해 내리기 메서드에서 명시 적으로 flush 메서드를 호출해야합니까? HashMap 대신 약한 HashMap을 사용하여 스텁 맵에 대한 인 워그 참조를 설정해야한다고 생각했지만 이것이 올바른 선택인지 여부는 알 수 없습니다. 이 article을 통해 읽었으며 여전히 명확하지 않습니다. 도움이 필요할 것입니다.
감사합니다, 개체의
Kartik