2011-12-15 11 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()); 

私が見つけたすべてのソリューションは、ストラットと、スプリングの設定ファイルが必要です。テストしたいすべてのコードが単一の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"); 

それがストラット2.1.8.1で動作するように小さな変更が必要です。 validateに電話する前に、私は次のようなことをします:

 
ActionInvocation actionInvocation = Mockito.mock(ActionInvocation.class, Mockito.RETURNS_DEEP_STUBS); 
ActionContext.getContext().setActionInvocation(actionInvocation); 
関連する問題