当前位置: 首页 > 知识库问答 >
问题:

在旧项目中开始编写单元测试是否可行?

姜建德
2023-03-14

我想开始为我们的项目编写单元测试(JUnit)。这将使用J2EE1.4和Hibernate3.1,并且连接代码和服务层之间存在紧密耦合(如果我是对的,请更正!)。

因此,假设我有功能来持久化一些表单值。结构有点像,

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; 
    }

}

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

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

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

共有1个答案

龚志
2023-03-14

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

HibernateUtil.getSessionFactory().openSession();

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

HibernateUtil.setSessionFactory(SessionFactory instance);

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

不管怎样,这就是我要开始的地方...

 类似资料:
  • 我不会告诉你有关后台任务的单元测试的任何内容,因为Hangfire没有添加任何特定方法 (除了 IJobCancellationToken 接口参数)去改变任务。使用您最喜爱的工具,并照常写入单元测试。本节介绍如何测试创建的后台任务。 所有的代码示例都使用静态 BackgroundJob 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担

  • 我在java中使用mockito编写单元测试。 这就是我要测试的声明。 电影是电影名称的集合,是识别电影的关键。 我嘲笑了守望者班 Mockito.when(watcher.watch(Matchers.any(Set.class))) “thenReturn”中包括什么??

  • 我的页面上有两个按钮,一个用于查看pdf(在新选项卡中打开),一个用于下载pdf(通过添加附件标题直接下载)。 以下是我到目前为止的测试代码:

  • 问题内容: 如果是跑它运行在您的文件结尾通过运行启动格式的功能和使用(* T testing.T)模块。我想知道文件中的每个功能是同时运行还是确定地分别运行每个功能?是否为每个人创建一个执行例程?如果确实为每个例程创建了一个go例程,是否可以某种方式监视go例程?是否有可能做类似的事情并为每个实例获取一个实例并对其进行监控,诸如此类? 注意:这个问题假设您使用go(测试)随附的测试框架。 问题答案

  • 问题内容: 我有一个Java课。如何进行 单元测试? 就我而言,我有课做一个二进制和。它需要两个数组,将它们求和,然后返回一个新的二进制数组。 问题答案: 使用正确的输入定义正常情况下的预期和期望输出。 现在,通过声明一个类来实现测试,将其命名为任何东西(通常是类似TestAddingModule之类的东西),并向其添加testAdd方法(即,类似于下面的方法): 编写一个方法,并在其上方添加@T

  • 我已经为Jenkins项目的集成公司建立了一个PoC,当Git存储库中有一个检查时,该PoC将构建并执行测试。当测试完成后,Jenkins将更新在Xray for JIRA中管理的测试。 测试是用cucumber写的。我曾徒劳地试图导致一个单一的测试产生一个失败,只是为了能够将它添加到我将要给高层管理人员的演示中。 以下是我的文件helloworld.feature的内容: 我知道不知道小cucu