gpt4 book ai didi

unit-testing - 在 JUnit 测试中运行 Jettys ServletTester

转载 作者:行者123 更新时间:2023-12-04 04:48:33 25 4
gpt4 key购买 nike

我正在尝试运行 Jettys ServletTester在我的 JUnit 测试中。我创建了一个简单的 HelloServlet首先测试设置,但我得到一个 IllegalAccessException当我尝试请求 servlet 时。这是我到目前为止所拥有的:

我的单元测试

@Before
public void setUp() throws Exception {
tester = new ServletTester();
tester.setContextPath("/context");
tester.addServlet(HelloServlet.class, "/hello/*");
tester.start();
}

@After
public void tearDown() throws Exception {
tester.stop();
}

@Test
public void testDefaultServlet() throws Exception {
HttpTester request = new HttpTester();
request.setMethod("GET");
request.setHeader("Host","127.0.0.1");
request.setURI("/context/hello/info");
request.setVersion("HTTP/1.0");

HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));

assertNull(response.getMethod());
assertEquals(200,response.getStatus());
assertEquals("<h1>Hello Servlet</h1>",response.getContent());
}

我的 HelloServlet
这个 servlet 与单元测试在同一个文件中定义,因为我希望它存在于 jetty 的初始设置中。一切运行后,我将删除它(或者保留它,但它会保留在单元测试中)。

更新 这个 servlet 是在单元测试本身内部定义的,因为它只是作为 jetty 服务器本身的配置测试。但是 jetty 无法访问它,并且在将其移入公共(public)类和自己的文件之后,一切都按预期工作。见评论。
class HelloServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("Hello, World!");
out.flush();
}
}

我的异常(exception)...
2009-10-20 09:36:28.973::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2009-10-20 09:36:28.989::INFO: jetty-6.1.21
2009-10-20 09:36:29.098::INFO: Started LocalConnector@0.0.0.0:1
2009-10-20 09:36:29.161:/context:WARN: unavailable
java.lang.IllegalAccessException: Class org.mortbay.jetty.servlet.Holder can not access a member of class my.package.HelloServlet with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.Class.newInstance0(Class.java:349)
at java.lang.Class.newInstance(Class.java:308)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:915)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
at org.mortbay.jetty.LocalConnector.accept(LocalConnector.java:186)
at org.mortbay.jetty.AbstractConnector$Acceptor.run(AbstractConnector.java:707)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

很奇怪,因为我几乎直接从 http://docs.codehaus.org/display/JETTY/ServletTester 得到了这个例子。 .任何想法或 的工作示例junit 测试中的嵌入式 jetty servlet 容器 ?

最佳答案

您的 HelloServlet 必须作为公共(public)类实现:

public class HelloServlet extends HttpServlet { ... }

关于unit-testing - 在 JUnit 测试中运行 Jettys ServletTester,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1593016/

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