SpringBoot 多模块Service 层测试

     项目源码:链接: https://pan.baidu.com/s/1yrGyenX3S5MPpHKuiwiCOw 提取码: e86e

     CSDN下载: https://download.csdn.net/download/zcf980/10731132

     在网上找了很久都没找到关于SpringBoot多模块的有效单元测试方法, 后来自己摸索了很久才解决, 写两篇博客来帮助大家

     此篇为 Service 的测试代码,       Dao层测试请参考:https://blog.csdn.net/zcf980/article/details/83047798

     本项目 分一个父工程 demo 和 三个子模块(demo-dao, demo-service, demo-web),  一个数据库 test , test里只有一张demo           表: 生成demo表的代码: 

CREATE TABLE `demo`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

     因为 demo-service 依赖 demo-dao ,所以此处贴上demo-dao 和demo-service 层的目录结构, 很简单:

             demo-dao 层:

             1. Demo.java, DemoRepository.java;

             2.  pom.xml, application.yml

             demo-service 层:             

             1. DemoService.java, DemoServiceImpl.java;

             2. DemoServiceTest.java,  DemoServiceApplicationTests.java

             3.  pom.xml

          !!!!注意:与Dao测试不同点: DemoServiceApplicationTests.java 放在 demo 这个包下, 这样的话根据SpringBoot 启动类扫描包的规则: 自从启动类所在包的位置自上而下扫描,就能扫描到位于 demo.demodao 下的 DemoRepository 这个 Bean 以及位于 demo.demoservice 下的 DemoService 的 Bean

下面贴上代码:

DemoService.java

package demo.demoservice;

import demo.demodao.Demo;

import java.util.List;

public interface DemoService {

    List<Demo> findAll();

}

 DemoServiceImpl.java

package demo.demoservice.impl;

import demo.demodao.Demo;
import demo.demodao.DemoRepository;
import demo.demoservice.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DemoServiceImpl implements DemoService {

    @Autowired
    private DemoRepository demoRepository;

    @Override
    public List<Demo> findAll() {
        return this.demoRepository.findAll();
    }
}

 DemoServiceApplicationTests.java(这个测试启动类不是默认测试启动类, 是经过修改的)  

package demo;

import org.junit.Test;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoServiceApplicationTests {
    @Test
    public void contextLoads() {
    }

}

 DemoServiceTest.java  

package demo.demoservice;

import demo.demodao.Demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoServiceTest {

    @Autowired
    private DemoService demoService;

    @Test
    public void testfindAll(){
        List<Demo> demos = demoService.findAll();
        for(Demo demo : demos){
            System.out.println(demo.getId() + " " + demo.getName());
        }
    }
}

  测试成功: 

  以上是主要代码, 下面贴上其他代码

  demo-service 的 pom.xml 文件:  

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>demo</groupId>
    <artifactId>demo-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo-service</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>demo</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!-- 添加 demo-dao 的依赖 -->
        <dependency>
            <groupId>demo</groupId>
            <artifactId>demo-dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

    </dependencies>

</project>

demo-dao 的文件:   

Demo.java 

package demo.demodao;

import javax.persistence.*;

@Entity(name = "demo")  //设置实体名, 在数据库中是表名
public class Demo {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)  //设置自动增长
    @Column(name = "id")
    private Integer id;

    @Column(name = "cname") //设置数据库字段名
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}

 DemoRepository.java

package demo.demodao;

import org.springframework.data.jpa.repository.JpaRepository;

public interface DemoRepository extends JpaRepository<Demo, Integer> {

}

  application.xml   

spring:
  datasource:
    # jdbc:mysql://localhost:3306/test 数据库地址
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root # 数据库用户名  修改为自己数据库用户名和密码
    password: xxxx  # 数据库密码
    driver-class-name: com.mysql.jdbc.Driver  # 数据库驱动

  jpa:
      hibernate:
        ddl-auto: none  #  create-drop  如果实体对应的表已存在,先删除再创建,否则直接创建
        #  !!!注意: 第一次运行时可设置为 create-drop, 这样就不需要手动创建数据库表, 但是后面运行务必设置为none

  pom.xml  

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>demo</groupId>
    <artifactId>demo-dao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo-dao</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>demo</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>

        <!-- 添加 demo-base 的依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

</project>

猜你喜欢

转载自blog.csdn.net/zcf980/article/details/83118300