1

我有以下 Struts 动作:

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

2 回答 2

0

您需要模拟tDao并使checkExistsTestreturn false 。

在你的类中有方法

   public ActionForward addSomething(...)

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

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

或子类化具体的 DAO 并覆盖此方法。

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

于 2012-06-14T16:01:59.250 回答
0

通过实现一个 DAO,无论是具体的还是通过模拟的,它返回falsefor checkExistsTest,并像现在一样检查转发名称——还有什么?

这就是依赖注入/控制反转如此有用的原因之一。

在不了解您的测试方式、DAO 的实例化方式/等等的情况下。很难提供具体的帮助。最终(希望很明显)测试失败,你必须失败。

于 2012-06-14T16:02:06.853 回答