单元测试Struts

时间:2012-06-14 15:55:29

标签: java unit-testing struts

我有以下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());
}

2 个答案:

答案 0 :(得分:0)

您需要模拟tDao并使checkExistsTest返回false。

在你的班级中有方法

   public ActionForward addSomething(...)

你应该注入(通过构造函数)或通过setter方法设置TDao的实现,该实现为该方法返回false,例如。

FakeDao implements TDao {
 public boolean checkExistsTest(...) {return false;}
}

或继承具体的DAO并覆盖此方法。

您还可以使用模拟框架来提供JMockMockito等实现。

答案 1 :(得分:0)

通过实现DAO,无论是具体的还是通过模拟,返回false checkExistsTest,并检查前面的名称,你现在还有什么?

这是依赖注入/控制反转非常有用的一个原因。

不知道如何测试,如何实例化DAO等。很难提供具体的帮助。最终(希望很明显)测试失败,你必须失败。