使用 DAO 和 Web 服务的数据库插入方法的 Junit 测试用例

2023-11-27

我正在实施一个基于网络服务的大学管理系统。该系统将某些课程添加到数据库中。下面是我正在使用的代码。

课程.java

public class Course {

    private String courseName;
    private String location;
    private String courseId;


       public String getCourseId()
               {
        return courseId;
            }

    public void setCourseId(String courseId) {
        this.courseId = courseId;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

        public String getLocation() {
        return location;
    }
    public void setLocation(String location) {
        this.location = location;
    }
}

然后另一个文件如下

CourseDaoImpl.java

public class CourseDaoImpl implements IDao {
   Connection conn = null;
   Statement stmt = null;

public CourseDaoImpl(){

try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/univesitydb", "root", "root");
    stmt = conn.createStatement();

    if (!conn.isClosed())
        System.out.println("Successfully connectiod");
} catch (SQLException e) {
    e.printStackTrace();
} catch (InstantiationException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}
}

      @Override
  public String add(Object object) {

Course c = (Course) object ;

String courseId = c.getCourseId();
String courseName = c.getCourseName();
String location = c.getLocation();

String result = "";
int rowcount;

try {
    String query = "Insert into course (courseId,courseName,location) values"
            + " ('"
            + courseId
            + "', '"
            + courseName
            + "', '"
            + location
            + "')";
    rowcount = stmt.executeUpdate(query);
    if (rowcount > 0) {
        result = "true";
        System.out.println("Course inserted successful");
    } else {
        result = "false:The data could not be inserted in the databse";
    }
} catch (SQLException e) {
    e.printStackTrace();
}

return result;
}

第三个是 Web 服务文件,如下所示,它与前两个文件交互并将数据添加到数据库。

课程服务.java

package edu.service;

          import edu.dao.IDao;
          import edu.dao.impl.CourseDaoImpl;
          import edu.db.entity.Course;

       public class CourseService {

     public String addCourse(String courseId, String courseName, String location)
    {   
       Course c = new Course();
       c.setCourseId(courseId);
       c.setCourseName(courseName);
       c.setLocation(location);     
       IDao dao = new CourseDaoImpl();
       return dao.add(c);   
     }

看看我的代码清单,任何人都可以建议我如何为我的添加方法编写测试用例。我是 JAVA 的初学者,我在朋友的帮助下学习了这个 java 部分,现在需要为我的数据库方法实现 Junit 测试,例如上面的添加课程。

请建议我可以学习、阅读和使用一些东西来为我的数据库方法实现 Junit 测试。


这是在 spring 项目中使用 junit 的一个示例 dao 测试。

import java.util.List;

import junit.framework.Assert;

import org.jboss.tools.example.springmvc.domain.Member;
import org.jboss.tools.example.springmvc.repo.MemberDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:test-context.xml",
"classpath:/META-INF/spring/applicationContext.xml"})
@Transactional
@TransactionConfiguration(defaultRollback=true)
public class MemberDaoTest
{
    @Autowired
    private MemberDao memberDao;

    @Test
    public void testFindById()
    {
        Member member = memberDao.findById(0l);

        Assert.assertEquals("John Smith", member.getName());
        Assert.assertEquals("[email protected]", member.getEmail());
        Assert.assertEquals("2125551212", member.getPhoneNumber());
        return;
    }

    @Test
    public void testFindByEmail()
    {
        Member member = memberDao.findByEmail("[email protected]");

        Assert.assertEquals("John Smith", member.getName());
        Assert.assertEquals("[email protected]", member.getEmail());
        Assert.assertEquals("2125551212", member.getPhoneNumber());
        return;
    }

    @Test
    public void testRegister()
    {
        Member member = new Member();
        member.setEmail("[email protected]");
        member.setName("Jane Doe");
        member.setPhoneNumber("2125552121");

        memberDao.register(member);
        Long id = member.getId();
        Assert.assertNotNull(id);

        Assert.assertEquals(2, memberDao.findAllOrderedByName().size());
        Member newMember = memberDao.findById(id);

        Assert.assertEquals("Jane Doe", newMember.getName());
        Assert.assertEquals("[email protected]", newMember.getEmail());
        Assert.assertEquals("2125552121", newMember.getPhoneNumber());
        return;
    }

    @Test
    public void testFindAllOrderedByName()
    {
        Member member = new Member();
        member.setEmail("[email protected]");
        member.setName("Jane Doe");
        member.setPhoneNumber("2125552121");
        memberDao.register(member);

        List<Member> members = memberDao.findAllOrderedByName();
        Assert.assertEquals(2, members.size());
        Member newMember = members.get(0);

        Assert.assertEquals("Jane Doe", newMember.getName());
        Assert.assertEquals("[email protected]", newMember.getEmail());
        Assert.assertEquals("2125552121", newMember.getPhoneNumber());
        return;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 DAO 和 Web 服务的数据库插入方法的 Junit 测试用例 的相关文章

随机推荐

  • 有比 .NET Reflector 更好的东西吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我以前很喜欢 NET Re
  • 如何向 ActionBar 中的图标添加文本?

    是否可以定义与图标一起显示在 ActionBar 中的文本 这是文本还是只是图像 Use android showAsAction ifRoom withText 显示菜单标题和图标
  • 如何在 Yii 中的 Web 应用程序操作中调用控制台命令?

    我有一个控制台命令来执行消费者时间 并且我需要知道如何在 YII 中的 Web 应用程序操作中调用 执行 它 class MyCommand extends CConsoleCommand public function actionInd
  • 如何确定高斯滤波器的窗口大小

    高斯平滑是一种常见的图像处理函数 高斯滤波的介绍可以参考here 我们可以看到 一个参数 标准导数将决定高斯函数的形状 然而 当我们用高斯滤波进行卷积时 还需要同时确定另一个参数 高斯滤波器的窗口大小 例如 当我们使用fspecialMAT
  • 在装有 Centos 5 的 64 位机器上使用带有 32 位二进制文​​件的 gdb 和 gdbserver 会抱怨内存访问或数据格式错误

    我有两台相同的 64 位 Centos 5 机器 它们已联网 并共享其 home 安装 我在一台机器上编译了一个简单的 Hello World 程序 然后我弄清楚了如何在一台机器上使用 gdb 远程调试在另一台机器上运行的程序 当每个人都默
  • 如何从 Node.js Lambda 函数调用步骤函数?

    我正在尝试从 Node js lambda 函数调用步骤函数 我尝试了该解决方案并更新了实现thread 显示错误响应的解决方案 但更新后的代码显示成功响应 但更新后的代码没有调用step函数 My Code console log Loa
  • Coldfusion:通过 url 将结构作为字符串传递

    有没有一种简单的方法可以将单级结构序列化为字符串以在 url 中使用 例如 key1 val1 key2 val2
  • 找不到 ionic.config.json 文件

    当我跑步时ionic build android 我收到这个错误 Couldn t find ionic config json file Are you in an Ionic project 我在项目文件夹中 请问有人吗 转到 ioni
  • (2006,'MySQL 服务器已经消失')在 WSGI django 中

    我在 WSGI 下有一个 MySQL 和 Django 一起消失了 我在 stackoverflow 上找到了这个问题的条目 但没有专门针对 Django 的 除了解决方法 例如每隔一段时间轮询一次网站 或增加数据库超时 之外 谷歌没有提供
  • 使用 .NET CLI 将 NuGet 包推送到 VSTS

    我正在尝试将 NuGet 包发布到私有 VSTS 源 我想使用来实现这一点only NET CLI 无需创建或修改 nuget config 文件 我尝试过这样做 dotnet nuget push
  • 片段和活动之间的通信 - 最佳实践

    这个问题主要是为了征求有关处理我的应用程序的最佳方式的意见 我有一个活动正在处理三个片段 片段 A 有 1 个可点击元素 照片 片段 B 有 4 个可点击元素 按钮 另一个片段仅在单击照片时显示详细信息 我正在使用 ActionBarShe
  • QML 中的forceActiveFocus() 与 focus = true

    我阅读了有关以下内容的文档 focus财产 activeFocus财产 forceActiveFocus method FocusScope object 和 QtQuick 中的键盘焦点 但仍不清楚何时应该使用forceActiveFoc
  • 无法在 redux-form w 中设置默认值。反应

    我无法设置带有 redux form 的表单的默认值 我正在寻找的结果是一个可编辑的文本字段 稍后提交到数据库 即更新电子邮件地址 我尝试将表单中的属性设置为value or 默认值 注意 我删除了重复的代码 以便仅使用 名称 字段就可以更
  • 用于从 select row_number() over() 中选择的 JPQL

    我在 AS 400 上使用 Db2 并且尝试执行 JPQL 查询 该查询将返回从行 x 到行 y 的结果 在 SQL 中 这是有效的 select cur from SELECT ROW NUMBER OVER AS ROWNUM FROM
  • 调用serve_forever() 时打印语句不起作用? [复制]

    这个问题在这里已经有答案了 我有以下小 python 脚本来运行本地服务器来测试一些 html print opened from http server import HTTPServer SimpleHTTPRequestHandler
  • 如何在 App Engine 上实现服务器亲和性或粘性会话?

    我的申请希望有 自动扩展 我希望 App Engine 在流量增加时启动应用程序的新实例 当实例空闲时 我希望 App Engine 将其关闭 客户端 服务器关联性 在初始客户端 gt 服务器 HTTP 请求之后 我想要客户端 能够连接到同
  • iPhone 上的单元测试如何进行?

    我是否需要为此使用特殊的库 或者我可以创建一个巨大的类来尝试实例化项目的每个对象并测试其中的所有方法吗 理论上是如何实现的 谷歌搜索 iPhone 单元测试 给出这个优秀的链接作为第一击 综上所述 Google Toolbox 为 iPho
  • Django 模板:为页面使用不同的 css

    刚接触 Django 我想对不同的页面使用不同的 css 文件 即 page1 css 用于 page1 html page2 css 用于 page2 html 有没有办法在扩展 base html 的同时做到这一点 在base html
  • 计算字符串中特定字符的数量

    抱歉 由于我的问题 我刚刚发现了一个新问题 获取字符串中特定字符串的数量 我一直在努力 如何找到字符串中特定字符的数量 案子是这样的 function get num chars char string 120201M 121212M 1
  • 使用 DAO 和 Web 服务的数据库插入方法的 Junit 测试用例

    我正在实施一个基于网络服务的大学管理系统 该系统将某些课程添加到数据库中 下面是我正在使用的代码 课程 java public class Course private String courseName private String lo