اختبار وحدة servlet
-
24-09-2019 - |
سؤال
حاليًا أستخدم TestNG Framework لاختبار منطق أعمال التطبيق ، أضفت بعض فئات Servlet مؤخرًا.
كيف يمكنني اختبار هذه الفئات Servlet في إطار TestNg؟
المحلول
اتبع نصيحة Skaffman إن أمكن. إذا لم يكن الأمر كذلك ، أو إذا كنت ترغب في اختبار سلوك Servlets كوحدات تحكم أمامية ، بدلاً من منطق العمل بداخلها ، يمكنك استخدام:
- htmlunit
- السيلينيوم
- صبار (لكنني لا أعرف كيف ما إذا كان يدعم testng بالفعل)
نصائح أخرى
واحدة من أسهل الطرق servletester من رصيف. يتم كل شيء داخل الرصيف المضمن تلقائيًا ، لذلك لا يوجد منفذ مفتوح أثناء الاختبار! إذا كنت تستخدم Maven من القطع الأثرية التالية مطلوب لتمكين هذه الطريقة:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-servlet-tester</artifactId>
<version>6.1.16</version>
<scope>test</scope>
</dependency>
مثال:
تحضير servletester
ServletTester tester=new ServletTester();
tester.addServlet(HelloServlet.class, "/hello");
tester.start();
إنشاء طلب HTTP
HttpTester request = new HttpTester();
request.setMethod("GET");
request.setHeader("Host","tester");
request.setURI("/hello");
request.setVersion("HTTP/1.0");
استدعاء servlet واسترداد الاستجابة:
HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));
تأكيد ما تريد التحقق من الاستجابة والمحتوى:
assertEquals(200,response.getStatus());
assertEquals("Hello Servlet",response.getContent());
أقترح عليك نقل كل منطق العمل خارج من فصول Servlet ، إلى فصولك الخاصة التي يمكنك اختبارها. هذا يترك servlets مثل الغراء بين منطق عملك والحاوية ، مع عدم وجود شيء يستحق الاختبار.
فصول API مثل HttpServletRequest
, ServletConfig
, ، إلخ ، هي أهداف رئيسية لاستخدام إطار سخر من اختيارك (JMock ، Mockito ، إلخ) ، لأنها جميعها واجهات.