我想开始为我们的项目编写单元测试(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模式,我认为这也错误地实现了。
所以我的问题是,考虑到这个小功能,我将如何开始编写单元测试?它需要多少?第一步对我来说真的很难。
此外,欢迎关于清洁代码实践的评论。
答案 0 :(得分:0)
您可以通过返回此行代码返回的模拟会话来模拟会话之类的对象:
HibernateUtil.getSessionFactory().openSession();
根据HibernateUtil的实现方式,如果有一个setter(或者你可以添加一个),你可以让util返回一个模拟SessionFactory,并在你的测试中设置它。
HibernateUtil.setSessionFactory(SessionFactory instance);
如果你没有setter并且无法修改代码,那么你可以使用类似Powermock的东西,这将允许你模拟静态方法和构造函数。
无论如何,这就是我要去的地方......