【问题标题】:How can I access a static resource under webapp from a JUnit test?如何从 JUnit 测试访问 webapp 下的静态资源?
【发布时间】:2023-03-19 10:03:01
【问题描述】:

我编写了一个 JUnit 测试,该测试根据其 XSD 验证服务返回的 xml。我最初将 XSD 放在 src/main/resrouces/xsd/<filename>.xsd 下,但现在我需要将其作为静态资源移动到 webapp 下,以便在部署应用程序时可以公开访问。

我宁愿没有两份,因为我希望有人迟早会修改错误的一份。

我正在加载带有getClass().getResource("/xsd/<filename>.xsd") 的文件,如果资源移动到webapp 下,我将如何访问它?

【问题讨论】:

    标签: java web-applications maven-2 junit


    【解决方案1】:

    /src/main/webapp 内容在创建和部署 WAR 时放置在 CLASSPATH 中,但在 JUnit 测试期间(在 maven 和我的 IDE 中)不会。您必须使用以下命令显式加载它们:

    new File("src/main/webapp/xsd/<filename>.xsd");
    

    只要项目主目录是运行测试时的当前目录,这应该可以工作。悲伤但真实。

    【讨论】:

      【解决方案2】:

      在您的 pom 中将其添加为资源目录。

      <resources>
          <resource>
              <directory>src/main/resources</directory>
          </resource>
          <resource>
              <directory>src/main/webapp</directory>
              <includes>
                  <include>xsd/schema.xsd</include>
              </includes>
          </resource>
      </resources>
      

      在java中使用

      String path = "/xsd/schema.xsd";
      InputStream is = getClass().getResourceAsStream(path);
      

      【讨论】:

      • 我没有测试这个,因为我最终去了另一条路线,但我想它会工作。
      【解决方案3】:

      您的资源仍将保留在类路径中,因此通常以您现在的方式加载它应该继续工作。

      【讨论】:

        猜你喜欢
        • 2017-07-05
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        • 2012-11-05
        • 2012-02-10
        相关资源
        最近更新 更多