编辑:您可以忽略我在下面写的大部分内容:
当我在一些 TestNG 代码中执行以下操作时,我得到了一个空值的上下文:
public void setupNonTrivialObjects() {
TestFixture.context = new MockServletContext("test");
}
我是否应该做更多的事情来创建一个不为空的 MockServletContext 对象?
原文:我正在学习将 Stripes 框架与 TestNG 结合使用。
我正在按照此处的示例进行操作(但将其调整为我自己的代码):http://www.stripesframework.org/display/stripes/Unit+Testing在方法 2
标题下我有这个测试:
public class SeedSearchActionBeanTest {
@Test
public void seedSearchTest() throws Exception {
// Setup the servlet engine
MockServletContext ctx = TestFixture.getServletContext();
MockRoundtrip trip = new MockRoundtrip(ctx, SeedSearchActionBean.class);
trip.setParameter("input", "sdfs");
trip.execute();
SeedSearchActionBean bean = trip.getActionBean(SeedSearchActionBean.class);
Assert.assertEquals(bean.getInput(),"sdfs");
Assert.assertEquals(trip.getDestination(), "/results.jsp");
}
}
这个“TestFixture”不太确定那是什么。
public class TestFixture {
private static MockServletContext context;
@BeforeSuite
public void setupNonTrivialObjects() {
TestFixture.context = new MockServletContext("test");
// Add the Stripes Filter
Map<String,String> filterParams = new HashMap<String,String>();
filterParams.put("ActionResolver.Packages", "net.sourceforge.stripes");
context.addFilter(StripesFilter.class, "StripesFilter", filterParams);
// Add the Stripes Dispatcher
context.setServlet(DispatcherServlet.class, "StripesDispatcher", null);
}
public static MockServletContext getServletContext() {
return TestFixture.context;
}
}
我收到这个错误
FAILED: seedSearchTest
java.lang.NullPointerException
at net.sourceforge.stripes.mock.MockRoundtrip.getUrlBindingStub(MockRoundtrip.java:384)
at net.sourceforge.stripes.mock.MockRoundtrip.<init>(MockRoundtrip.java:96)
at net.sourceforge.stripes.mock.MockRoundtrip.<init>(MockRoundtrip.java:82)
at sempedia.tests.action.SeedSearchActionBeanTest.seedSearchTest(SeedSearchActionBeanTest.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
我猜这行 MockServletContext ctx = TestFixture.getServletContext();
不工作,我想知道我是否遗漏了什么,特别是我必须在 web.xml 中做些什么吗?
最佳答案
错误在于这一行:
filterParams.put("ActionResolver.Packages", "net.sourceforge.stripes");`
这应该是(在我的例子中):
filterParams.put("ActionResolver.Packages", "action");
本质上,您是在设置 ActionBeans 所在的包名称。一旦您知道,这似乎非常明显。
关于java - Stripes 框架单元测试 : MockServletContext giving NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921850/