junit mockito Dao层

2024-06-15 01:28
文章标签 junit dao mockito

本文主要是介绍junit mockito Dao层,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Dao层单元测试需要启动服务的上下文

业务逻辑需要别名进行MOCK打桩

为了不影响测试结果和对数据库产生脏数据,使用@Sql注解来完成相关数据的初始化和清除

Dao

public interface BranchDao extends BaseDao<BranchPO, Long> {@Modifying@Transactional@Query(nativeQuery = true,value = "update T_BRANCH_INFO set ADDRESS=?2, UPDATE_DATE=sysdate where BRANCH_NO=?1")int updateAddressByBranchNo(Long branchNo, String address);}

Service Impl

@Slf4j
@Service
public class BranchServiceImpl implements BranchService {@Autowiredprivate BranchRepository branchRepository;@Overridepublic boolean updateAddressByBranchNo(Long branchNo, String address) {if (branchNo == null || address == null) {return false;}try {return branchRepository.updateAddressByBranchNo(branchNo, address) > 0;} catch (Exception e) {log.error("修改营业部的地址异常, branchNo={}, address={}", branchNo, address, e);}return false;}
}

BaseTest

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class BaseTest extends Mockito {
}

Test

@Slf4j
public class BranchServiceImplTest extends BaseTest {@Autowired//Autowired为了上下文测试private BranchServiceImpl branchService;@InjectMocks//InjectMocks启个别名Mock打桩单元测试private BranchServiceImpl mockBranchService;@Mockprivate BranchRepository branchRepository;@Beforepublic void init() {MockitoAnnotations.initMocks(this);}@Testpublic void updateAddressByBranchNo_NullBranchNo_ReturnsFalse() {boolean result = branchService.updateAddressByBranchNo(null, "123 Main St");Assert.assertFalse(result);}@Testpublic  void updateAddressByBranchNo_NullAddress_ReturnsFalse() {boolean result = branchService.updateAddressByBranchNo(1L, null);Assert.assertFalse(result);}@Test@SqlGroup({@Sql(statements = {"insert into t_branch_info(id,branch_no,branch_name,address) values(seq_branch_info.nextval,100,'营业部名称','营业部地址')"},executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD),@Sql(statements = {"delete t_branch_info where branch_no=100"},executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)})public void updateAddressByBranchNo_Success_ReturnsTrue() {BranchInfoVO vo = branchService.findByBranchNo(100L);Assert.assertEquals("营业部名称",vo.getBranchName());Assert.assertEquals("营业部地址",vo.getAddress());boolean result = branchService.updateAddressByBranchNo(100L, "123 Main St");Assert.assertTrue(result);vo = branchService.findByBranchNo(100L);Assert.assertEquals("123 Main St",vo.getAddress());}@Testpublic  void updateAddressByBranchNo_Update_ReturnsFalse() {boolean result = branchService.updateAddressByBranchNo(100L, "123 Main St");Assert.assertFalse(result);}@Testpublic  void updateAddressByBranchNo_Exception_ReturnsFalse() {when(branchRepository.updateAddressByBranchNo(anyLong(),anyString())).thenThrow(new RuntimeException());boolean result = mockBranchService.updateAddressByBranchNo(100L, "123 Main St");Assert.assertFalse(result);}
}

这篇关于junit mockito Dao层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062038

相关文章

Hibernate插入数据时,报错:org.springframework.dao.DataIntegrityViolationException: could not insert: [cn.itc

在用junit测试:插入数据时,报一下错误: 错误原因: package junit;import org.junit.Test;import cn.itcast.crm.container.ServiceProvinder;import cn.itcast.crm.dao.ISysUserDao;import cn.itcast.crm.domain.SysRole;

javaweb-day01-2(Junit测试工具用法)

JUnit 注释是给人看的,注解是给程序和编译器看的。 写好一个没有main函数的实体Person类,并且不想在main函数中来测试这个类中的方法: 我们一般使用JUnit测试: 建一个Junit.test包在这个包下建一个Junit test case,命名为PersonTest.java在Junit的测试用例PersonTest.java类中,建 testRun()、t

hibernate泛型Dao,让持久层简洁起来

【前言】hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据库。同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么我们在项目中如何灵活应用hibernate,也会给项目维护以及项目开发带来便利,下面我将展示我们项目中是如何来对hibernate进行应用和操作。 【目录】              -

设计之道:ORM、DAO、Service与三层架构的规范探索

引言: 实际开发中,遵守一定的开发规范,不仅可以提高开发效率,还可以提高项目的后续维护性以及项目的扩展性;了解一下本博客的项目设计规范,对项目开发很有意义 一、ORM思想 ORM(Object-Relational-Mapping)在对象模型和关系型模型之间做一个映射(转换)。 目的是为了解决面向对象编程语言的发展和关系型数据库的发展不匹配的问题 可以理解为: 将Java中的数据结

Spring回顾之五 —— 测试,JUnit与SpringTest的完美结合

没有测试的程序,是不完整的,每一个从事写程序的人员,都应该坚持做单元测试,通过单元测试可以验证程序基本功能的有效性,从而保证整个系统的质量,功在一时,利在千秋。这里我们将尝试使用Junit和SpringTest,在之前的系统里添加测试功能。 第一步:JUnit与SpringTest的引入     JUnit故名知意,是一个专门为Java语言提供单元测试的框架。平时的开发过程中,单元

Junit使用教程(四)

一、会用Spring测试套件的好处 在开发基于Spring的应用时,如果你还直接使用Junit进行单元测试,那你就错过了Spring为我们所提供的饕餮大餐了。使用Junit直接进行单元测试有以下四大不足: 1)导致多次Spring容器初始化问题 根据JUnit测试方法的调用流程,每执行一个测试方法都会创建一个测试用例的实例并调用setUp()方法。由于一般情况下,我们在setUp()方法中初始化

Junit使用教程(三)

四、实例总结 1. 参数化测试 有时一个测试方法,不同的参数值会产生不同的结果,那么我们为了测试全面,会把多个参数值都写出来并一一断言测试,这样有时难免费时费力,这是我们便可以采用参数化测试来解决这个问题。参数化测试就好比把一个“输入值,期望值”的集合传入给测试方法,达到一次性测试的目的。 [java] view plain copy print ? package test;

1、junit学习之junit的基本介绍

Junit目前在一些大的公司或者相对规范的软件中使用的比较多,相当多的小公司并没有把单元测试看的太重要。在大点的公司开发人员每天上班后,第一件事情就是从svn上把自己负责的代码checkout下来,然后运行单元测试,如果单元测试通过,那么说明自己的代码没有问题,然后就在代码块上修改与添加,完成后再用junit进行测试,测试完成后如果没有问题,那么就把相应的代码块提交给svn上。 测试一般分为:

Android Studio:Error:(23, 17) Failed to resolve: junit:junit:4.12

在Android Studio中创建项目之后,可能会遇到错误:Error:(23, 17) Failed to resolve: junit:junit:4.12,这是因为项目引用到了Junit单元测试工具。 该错误的解决方法是找到项目中的build.gradle文件,如下: 打开该文件,注释掉或者删除掉junit:junit:4.12的引用,如下:

最佳MyBatis 根据表结构自动生成代码, domain, dao, mapper 文件

摘要: 接触mybatis时间不是很长, 但是感觉也还容易上手, 好处发现也很多, 觉得还挺方便, 这段时间又学习一下MyBatis自动生成代码. 觉得在效率上更好了, 所以分享一下自动生成代码的步骤. 首先, 看看我的项目的包结构, 用的IDEA13.1,gradle包管理工具, ...其他的就没什么可说的; 今天, 主要讲 generator 里面的东西; mysql的jar包是