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);
}
答案 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
可能就足够了。