我想对使用注释定义的验证进行单元测试。但它应该很轻。无需加载任何配置文件。我对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文件中,为什么我需要它们?
答案 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);