gpt4 book ai didi

java - 对 Java Servlet 进行单元测试

转载 作者:IT老高 更新时间:2023-10-28 20:29:06 32 4
gpt4 key购买 nike

我想知道对 servlet 进行单元测试的最佳方法是什么。

测试内部方法只要不引用 servlet 上下文就没有问题,但是测试 doGet/doPost 方法以及引用上下文或使用 session 参数的内部方法呢?

有没有一种方法可以简单地使用 JUnit 等经典工具,或者最好使用 TestNG?我需要嵌入 tomcat 服务器或类似的东西吗?

最佳答案

大多数时候,我通过“集成测试”而不是纯单元测试来测试 Servlet 和 JSP。有大量适用于 JUnit/TestNG 的附加组件,包括:

  • HttpUnit (最古老和最著名的,非常低的级别,根据您的需要可能是好是坏)
  • HtmlUnit (比 HttpUnit 级别更高,对很多项目来说更好)
  • JWebUnit (位于其他测试工具之上并尝试简化它们 - 我更喜欢的那个)
  • WatiJ和 Selenium(使用您的浏览器进行测试,更重量级但更现实)

这是一个针对简单订单处理 Servlet 的 JWebUnit 测试,该 Servlet 处理来自“orderEntry.html”表单的输入。它需要一个客户 ID、一个客户名称和一个或多个订单项:

public class OrdersPageTest {
private static final String WEBSITE_URL = "http://localhost:8080/demo1";

@Before
public void start() {
webTester = new WebTester();
webTester.setTestingEngineKey(TestingEngineRegistry.TESTING_ENGINE_HTMLUNIT);
webTester.getTestContext().setBaseUrl(WEBSITE_URL);
}
@Test
public void sanity() throws Exception {
webTester.beginAt("/orderEntry.html");
webTester.assertTitleEquals("Order Entry Form");
}
@Test
public void idIsRequired() throws Exception {
webTester.beginAt("/orderEntry.html");
webTester.submit();
webTester.assertTextPresent("ID Missing!");
}
@Test
public void nameIsRequired() throws Exception {
webTester.beginAt("/orderEntry.html");
webTester.setTextField("id","AB12");
webTester.submit();
webTester.assertTextPresent("Name Missing!");
}
@Test
public void validOrderSucceeds() throws Exception {
webTester.beginAt("/orderEntry.html");
webTester.setTextField("id","AB12");
webTester.setTextField("name","Joe Bloggs");

//fill in order line one
webTester.setTextField("lineOneItemNumber", "AA");
webTester.setTextField("lineOneQuantity", "12");
webTester.setTextField("lineOneUnitPrice", "3.4");

//fill in order line two
webTester.setTextField("lineTwoItemNumber", "BB");
webTester.setTextField("lineTwoQuantity", "14");
webTester.setTextField("lineTwoUnitPrice", "5.6");

webTester.submit();
webTester.assertTextPresent("Total: 119.20");
}
private WebTester webTester;
}

关于java - 对 Java Servlet 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/90907/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com