2016-03-22 15 views
0

私はテストするためにいくつかの醜いクラスを持っている、私はそれを変更することはできないことを認めなければならない。だから、問題の根底に立ちましょう。そのメソッドが他のメソッドの中で呼び出されたかどうかをテストする方法

私はこのように、1つのかなり長い静的メソッドで、クラスを持っている

:私はいくつかの要求がある場合、それが呼び出すparamsは、ことをテストしたい、そして、

public class SomeClass{ 

public SomeClass(){ 
} 

public static String Dispatch(HttpServletRequest request){ 
    String param1= request.getParameter("param1"); 
    String param2 = request.getParameter("param2"); 

    Factory factory = // .. some Bean, used as Factory 

    // lot, lot if.. else statements that returning smth based on params 
    if(param1.equalsIgnoreCase("smthParam1")){ 
     if(param2.equalsIgnoreCase("smthParam2")){ 
      factory.getInstance().invokeSmth(); 
     } else if(param2.equalsIgnoreCase("smthParam2_2")){ 
      factory.getAnotherObjectInstance().invokeSmth(); 
     } else if(param2.equalsIgnoreCase("smthParam2_3")){ 
      factory.getYetAnotherObjectInstance().invokeSmth(); 
     } 
    } 

    // More if.. else statements... 

    return "Error"; 
} 

}

工場からのシングルトン法。

どうすればいいのかわかりませんが、できますか?元のコードは変更できないことに注意してください。手伝ってくれてありがとう。

+0

修正できない場合、見つけたバグは修正できません。バグを修正できない場合は、なぜそれをテストするのですか? – Raedwald

答えて

0

PowerMockがお手伝いできます。私が理解しているように、MockConstructorはそのトリックを行うべきです。リンクされたドキュメントの例に従えば、次のようなものが得られるはずです:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(SomeClass.class) 
public class SomeClassTest { 

    @Test 
    public void testCreateDirectoryStructure_ok() throws Exception { 
     // create parameters for factory creation 
     Factory factoryMock = createMock(Factory.class); 

     SomeClass tested = new SomeClass(); 

     expectNew(Factory.class, /* parameters */).andReturn(factoryMock); 
     // mock factory methods 
     replay(factoryMock, Factory.class); 

     tested.Dispatch(/*...*/); 

     // assert/verify interaction 
    } 
} 
関連する問題