Stripes框架单元测试:MockServletContext给出NullPointerException

时间:2011-02-07 13:29:28

标签: java testng stripes

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

当我在一些TestNG代码中执行以下操作时,我得到了上下文的空值:

 public void setupNonTrivialObjects() {
     TestFixture.context = new MockServletContext("test");
     }

我是否应该做更多的事情来制作一个非空的MockServletContext对象?


ORIGINAL:我正在学习使用Stripes Framework和TestNG。

我在这里关注示例(但是将其调整为我自己的代码):标题方法2

下的http://www.stripesframework.org/display/stripes/Unit+Testing

我有这个测试:

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中有什么需要做的吗?

2 个答案:

答案 0 :(得分:2)

错误在于这一行:

 filterParams.put("ActionResolver.Packages", "net.sourceforge.stripes");` 

这应该是(在我的情况下):

filterParams.put("ActionResolver.Packages", "action");

基本上,您要设置找到ActionBeans的包名称。一旦你知道它就会非常明显。

答案 1 :(得分:1)

您似乎正在测试是否已经设置了Stripes动作bean创建和参数传递,这无疑已经被开发Stripes Framework的人广泛测试过。我倾向于测试从我的操作调用的加载/保存/等业务逻辑(服务)。