2011-12-15 80 views
0

我想单元测试我的验证定义与注释。但它应该很轻。无需加载任何配置文件。我对struts2比较陌生,所以我不确定它是否可能。我有MyAction与方法:单元测试没有配置文件的struts2注释验证

@Validations(...) 
public String submit() {...} 

,我想的是一样的东西:

@Test 
public void submitTest() { 
    MyAction myAction = createInitializedMyAction(); //new MyAction, setXXX 
    Map<String, String> httpRequestParams = prepareHttpRequestParams(); 
    TestHelperINeed testHelper = createTestHelper(myAction); // maybe some proxy??? 
    testHelper.execute("submit", httpRequestParams); 

    assertErrors(testHelper.getErrors()); 
    assertResult(testHelper.getResult()); 

每一个解决方案,我发现需要Struts和Spring的配置文件。为什么我需要它们,如果我想测试的所有代码位于单个java文件中?

回答

0

,我发现有一个解决方案:http://bloodredsun.com/2009/10/21/unit-testing-struts2-actions-with-annotation-based-validation/

它需要小的重构,使之更加有用的,但它的工作原理。至少在Struts 2.1.6中。我还添加了一些更改,以使其可以用作我的生产支柱:

 
builder.constant("devMode", "false"); 
builder.constant("objectFactory.classloader", ActionAnnotationValidatorFactory.class.getClassLoader().getClass()); 

Container container = builder.create(true); 
ValueStackFactory ognlValueStackFactory = container.getInstance(ValueStackFactory.class); 
((OgnlValueStackFactory) ognlValueStackFactory).setAllowStaticMethodAccess("true"); 

它需要稍作更改才能使用struts 2.1.8.1。在致电validate之前,我会这样做:

 
ActionInvocation actionInvocation = Mockito.mock(ActionInvocation.class, Mockito.RETURNS_DEEP_STUBS); 
ActionContext.getContext().setActionInvocation(actionInvocation);