2017-07-28 9 views
0

new to junitテスト・ケースここで私のコードのテスト・ケースは ハードコーディング値なしで知りたい。ハード・コーディングなしでspringbootでメソッドのJunitテスト・ケースを書くには

私のコードは私のコントローラコードがある

public JSONObject getListOfAllForms() { 

    List<Forms> forms = FormName.getInstance().getformList(); 
    int totalNumberOfforms = 0; 
    List<String> formIds = new ArrayList<String>(); 
    try { 
     for (int i = 0; i < forms.size(); i++) { 
      form formOb = forms.get(i); 
      formIds.add(formOb.getformId()); 
      totalNumberOfforms = forms.size(); 

     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    JSONObject formsListObject = new JSONObject(); 
    formsListObject.put("formIds", formIds); 
    formsListObject.put("totalNumberOfforms", totalNumberOfforms); 
    return formsListObject; 
} 

です:

List<Forms> forms = FormName.getInstance().getformList(); 

この行...

@RequestMapping(value = "/new/getforms/{formid}", method = RequestMethod.GET) 
public JSONObject getFormByFormId(@PathVariable("formid") String formid) { 
    return newFormName.getformByformId(formid); 
} 
+2

どのような値をハードコードしたくないですか? – Lino

+0

全体的なことはあまり意味がありません。あなたは 'getListOfAllForms'メソッドを与えていますが、コントローラは別のメソッド' getformByformId'を呼び出します。正確に何をテストしたいですか? –

+0

ローカルホストのフォームIDを持つすべてのフォームを "/ new/getforms/formid @FlorianSchaetz – venu

答えて

0

あなたはあなたの問題は基本的にこのラインであるgetListOfAllFormsテストする場合あなたの方法にあなたのFormNameを結びつけてください。これは悪いです。

良い方法は、あなたのクラスをインスタンス化するときFormNameインスタンスを提供することで、たとえば、のは、自分のクラスの名前はMyClassだったと仮定しましょう。..

private FormName formName; 

public MyClass(FormName formName) { 
    this.formName = formName; 
} 

これは春を介して、または手動で使用することができます。 Springを使用してFormNameインスタンスをBeanにする必要がある場合は、MyClass自身がBeanの場合は、@Autowiredをコンストラクタに追加できます。

今はどのような利点がありますか?簡単には、テストケースのために、あなたは今、単純なことを行うことができます...これを行う

public void someGreatTestName() { 
    FormName formName = ...; // either create a new, fake one or mock one (see below) 
    JSONObject object = new MyClass(formName).getListOfAllForms(); 

    // now test that the object is correct 
} 

は、テストのために必要なデータを返すので、削除しますた、そこに偽物やモックFormNameを注入できることを意味します実際に "生きている"必要があるFormNameそこに。言い換えれば、あなたはFormNameへの依存関係を擬似/模擬することができます。このようにして、テストではテストデータが使用され、実際の値をハードコードする必要はありません。

Mockitoを使って簡単にモッキングすることができます。たとえば、試してみることをおすすめしますが、この場合は単に新しい "fake"を作成するだけで十分です。FormName

関連する問題