我有以下Struts Action:
public ActionForward addSomething(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
SomeForm sForm = (SomeForm) form;
Test t = testForm.toTest();
if (tDao.checkExistsTest(t.getTest())) {
return mapping.findForward("failure");
} else {
t.setType(new TestType(tess));
t.setPassword(testForm.getPassword());
tDao.add(t);
return mapping.findForward("success");
}
}
我做了以下代码来测试 testAddSomethingSuccess 方法:
@Test
public void testAddSomethingSuccess() throws Exception {
form.setTest("LOL");
form.setTestName("lol");
form.setPassword("12345");
ActionForward forward = action.addSomething(mapping, form, request, response);
assertEquals(tDao.getList().get(0).getTest(), "LOL");
assertEquals(tDao.getList().get(0).getTestName(), "lol");
assertEquals(tDao.getList().get(0).getPassword(), "12345");
assertEquals("success", forward.getName());
}
如何实现 testAddClientFailed() ??? :
@Test
public void testAddSomethingFailed() throws Exception {
form.setTestName("lol");
t.checkIfExists("lol");
ActionForward forward = action.addSomething(mapping, form, request, response);
assertEquals("failure", forward.getName());
}
答案 0 :(得分:0)
您需要模拟tDao
并使checkExistsTest
返回false。
在你的班级中有方法
public ActionForward addSomething(...)
你应该注入(通过构造函数)或通过setter方法设置TDao
的实现,该实现为该方法返回false,例如。
FakeDao implements TDao {
public boolean checkExistsTest(...) {return false;}
}
或继承具体的DAO并覆盖此方法。
答案 1 :(得分:0)
通过实现DAO,无论是具体的还是通过模拟,返回false
checkExistsTest
,并检查前面的名称,你现在还有什么?
这是依赖注入/控制反转非常有用的一个原因。
不知道如何测试,如何实例化DAO等。很难提供具体的帮助。最终(希望很明显)测试失败,你必须失败。