2017-07-28 94 views
0

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; 
} 

我的控制器代码:

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

你不想硬编码的值是什么? – Lino

+0

整件事情没有多大意义,您正在给出一个'getListOfAllForms'方法,但是Controller调用另一个方法'getformByformId'。你想要测试什么? –

+0

我会列出所有窗体ID在本地主机中的名称为“/ new/getforms/formid @FlorianSchaetz – venu

回答

0

如果你想测试你的getListOfAllForms问题是基本上这条线......

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

这条线很难将你的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的依赖。这样,您的测试使用测试数据,您不必在那里对活动值进行硬编码。例如,我建议尝试一下,但在这种情况下,简单地创建一个新的“假”FormName可能就足够了。

相关问题