如何通过 Ant(也使用 Jetty 和 RestAssured)在集成测试 运行 的类路径中安装 servlet.jar

How to mount servlet.jar in the classpath of an integration test run by Ant (that also uses Jetty and RestAssured)

我有一个项目https://github.com/paul-hammant/helloworld-war(别人的分支,增值)。这是一个非常快速的构建,应该作为尚未翻转到 Maven/Gradle 等

的团队的集成测试演示。

它有一个启动 Jetty 的集成测试,并运行一个使用出色的 Rest-Assured 的集成测试来确认 /helloworld 端点执行其 "Hello World" 业务。

@Before
public void beforeAll() throws Exception {
    Server server = new Server(8080);
    WebAppContext context = new WebAppContext();
    context.setResourceBase("./web");
    loadAnnotations(context);
    server.setHandler(context);
    server.start();
}

@Test
public void testSomething() {
    when()
        .get("/helloworld")
    .then()
        .statusCode(200)
        .body(equalTo("Hello, world\n"));
}

在 Intellij 中一切正常,很好。

Ant 吐了,说找不到 servlet API。它肯定在类路径中。我试过更改 Jetty 罐子和 servlet-api 罐子的顺序(没有用)。我试过从类路径中删除 servlet jar(没有用)。除了将 servlet jar 推送到 ant_home/lib/ 之外,我不确定我还能做什么,这会很糟糕。有什么建议?

嗯,Ant 看起来有点神秘。根本原因已在 https://github.com/paul-hammant/helloworld-war 中修复。这是一些 jar 必须从常规 Ant 指令中取出,并放入 Ant 的 lib/ 文件夹本身。

具体来说:

  1. hamcrest-core-1.3.jar
  2. hamcrest-library-1.3.jar
  3. junit-4.12.jar

上次用Ant已经十年了。我模糊地记得 Junit 有一些花招。似乎随着时间的流逝,Hamcrest 加入了 JUnit 需要一个 hokey 设置。