Ich habe eine Frage zu Speicherverwaltung/Speicherlecks, die ich gerne klären würde.Minimierung der Objekterhaltung während der Komponententests
Set Up:
ich einige Servlet-Code mich entschieden, die HttpServletRequest und Httpresponse nimmt Referenzen Objekte HttpServletRequest # getParameter (String), HttpServletRequest # getHeader (String) und HttpServletRequest # getAttribute (String).
Ich schreibe Komponententests für den Servlet-Code. Um Tests zu ermöglichen, habe ich Stubs für HttpServletRequest und HttpServletResponse erstellt, die das Testen ermöglichen. Der Beispielcode ist unten angegeben:
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
}
In meiner Unit-Test:
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);
}
}
Meine Frage ist in Bezug auf die Speicherverwaltung. Ist es notwendig für mich, den gefälschten Header zu leeren, Karteninhalte nach der Testausführung anzufordern und zu kennzeichnen oder würde dies automatisch passieren, sobald die Anfrage, Antwortobjekte in meiner Abrißmethode dereferenziert werden (mit @After gekennzeichnet) ?. Müsste ich die flush-Methode explizit in meiner Abreißmethode aufrufen, um Speicherreferenzen zu löschen? Ich dachte, dass ich möglicherweise schwache Referenzen für Stub Maps mit Schwachen HashMap anstelle von HashMap einrichten muss, aber ich weiß nicht, ob das die richtige Wahl ist. Ich lese diese article durch und es ist immer noch nicht klar. Jede Hilfe wäre nützlich.
Danke,
Kartik