0

我想开始为我们的项目编写单元测试(JUnit)。这将 J2EE 1.4 与 Hibernate 3.1 一起使用,并且连接代码和服务层之间存在紧密耦合(如果我是对的,servlet?纠正我!)。

所以假设我有保留一些表单值的功能。结构是这样的,

MyServlet.java

public void doGet(ServletRequest request, ServletResponse response)
{
    T_Donation instance - new T_Donation();

    instance.setName(request.getParameter("name"));
    instance.setAmount(request.getParameter("amount"));

    MyDAO dao = new MyDAO();
    Boolean b = dao.persistInstance(instance);

    if(b.booleanValue())
    {
        // forward to .jsp file by means of RequestDispatcher
    } 

}

模型 T_Donation

public class T_Donation implements Serializable
{
   private String name;
   private String amount;

   // getters, setters
   // equals, hashcode
}

DAO 类

public class MyDAO
{
    public boolean persistInstance(T_Donation instance)
    {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null; 
        try
        {
           tx = sesion.beginTransation();
           // setters again if needed
           session.save(instance);           
           tx.commit();
        }
        catch(Exception ex)
        {
             ex.printStackTrace();
             return false;
        } 
        finally
        {
             session.close();
        }
        return true; 
    }

}

这就是代码库的样子。我正在学习 DAO 模式,我认为这里也错误地实现了。

所以我的问题是,考虑到这个小功能,我将如何开始编写单元测试?它需要多少?第一步对我来说真的很难。

此外,欢迎对更简洁的代码实践发表评论。

4

1 回答 1

0

您可以通过从这行代码的返回返回一个模拟会话来模拟会话之类的对象:

HibernateUtil.getSessionFactory().openSession();

根据 HibernateUtil 的实现方式,如果有一个 setter(或者你可以添加一个),你可以让 util 返回一个模拟 SessionFactory 并在你的测试中设置它。

HibernateUtil.setSessionFactory(SessionFactory instance);

如果您没有设置器并且无法修改代码,那么您可以使用类似 Powermock 的东西,它允许您模拟静态方法和构造函数。

无论如何,这就是我要开始的地方......

于 2013-09-02T22:45:23.620 回答