如何在没有硬编码的情况下为springboot中的方法编写Junit测试用例

时间:2017-07-28 11:31:26

标签: java junit

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

1 个答案:

答案 0 :(得分:0)

如果你想测试getListOfAllForms你的问题基本上就是这一行...

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

这一行将您的FormName硬融入您的方法。这是不好的。

更好的方法是在实例化您的课程时提供FormName实例,例如,让我们假设您的课程名称为MyClass ..

private FormName formName;

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

这可以通过Spring或手动使用。通过Spring,您的FormName实例只需要是一个bean,如果@Autowired本身是一个bean,您可以将MyClass添加到构造函数中。

现在有什么优势?简单,对于测试用例,您现在可以做一些简单的事情......

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,这将返回您想要进行测试的数据,因此无需拥有实际的&#34; live&#34; FormName那里。换句话说,您可以伪造/模拟对FormName的依赖。这样,您的测试就会使用测试数据,而您不必对那里的实时值进行硬编码。

可以通过Mockito轻松完成模拟,例如,我建议尝试一下,但在这种情况下,只需创建一个新的&#34;假的&#34; FormName可能就足够了。

相关问题