没有配置文件的单元测试struts2注释验证

时间:2011-12-15 15:18:18

标签: unit-testing validation struts2 annotations

我想对使用注释定义的验​​证进行单元测试。但它应该很轻。无需加载任何配置文件。我对struts2很新,所以我不确定它是否可能。我有MyAction方法:

@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文件中,为什么我需要它们?

1 个答案:

答案 0 :(得分: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);