java - Stripes 框架单元测试 : MockServletContext giving NullPointerException

标签 java testng stripes

编辑:您可以忽略我在下面写的大部分内容:

当我在一些 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/

相关文章:

java - 如何使用 List<WebElement> webdriver

java - 无法将图像图标加载到 Netbeans 中的按钮

java - 如何在特定时间内运行任务

java - 用于捕获工作统计信息的任何好的 java 库?

java - 您可以根据自己的需要创建一个 TestNG Listener

java - Tomcat 6 - 请求的资源......不可用

java - 线条未出现在 JDesktopPane 上

java - PowerMock 模拟外部库

java - 如何使用stripes框架安全地实现 "remember me in this computer"?

java - 使用带有 Stripes 参数的 POST 方法重定向到另一个站点