首页 > 编程语言 >Java测试代码编写

Java测试代码编写

时间:2024-02-05 22:32:38浏览次数:37  
标签:Java queryUser Mockito Cookie Assertions userService 测试代码 编写 class

一、单元测试

1.1 引入依赖

1、root

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>${spring-boot.version}</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

2、具体module

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-api</artifactId>
  <version>5.6.3</version>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
  <exclusions>
    <exclusion>
      <groupId>org.junit.vintage</groupId>
      <artifactId>junit-vintage-engine</artifactId>
    </exclusion>
  </exclusions>
</dependency>

1.2 创建测试类

@SpringBootTest // 加载Spring上下文,寻找@SpringBootApplication 注解。
public class ExcelServiceImplTest {
  
  @Resource // 注入待测试类
  private ExcelServiceImpl excelService;

}
  • 在Junit4中,还需要加@RunWith(SpringRunner.class) // 实现Spring Boot单元测试
  • 在JUnit 5中,Spring Boot 提供了一个扩展 @SpringBootTest,它隐式地使用 SpringExtension 来运行测试,而无需显式指定 @RunWith() 注解

版本对应关系:

Java测试代码编写_测试类

1.3 编写测试方法

@SpringBootTest
class IntegrationMonitorServiceTest {
    @Resource
    private IntegrationMonitorService integrationMonitorService;

    @Test
    void testGetTpMonitorTableDTOList() {
        String jsonStr = "";
        List<TpDataMonitorQry> tpDataMonitorQry = JSON.parseArray(json, TpDataMonitorQry.class);
        Result<List<TpMonitorInfoDTO>> tpMonitorTableDTOList = integrationMonitorService.getTpMonitorTableDTOList(tpDataMonitorQry);
        Assertions.assertTrue(tpMonitorTableDTOList.getSuccess());
    }
}

1.4 进阶

1、启动类

@SpringBootTest(classes = Application.class, properties = "spring.profiles.active=test")

classes 属性指向一个启动类或配置启动类,一般不填

2、feign接口调用

编写一个配置类

@SpringBootApplication(exclude = {RedisAutoConfiguration.class, RabbitAutoConfiguration.class})
@ComponentScan(basePackages = "com.gemenyaofei.integration")
@EnableLocalHostFeign(serverNameAndUrl = {ServiceNameConst.SYSTEM_SERVICE + "=http://172.16.20.56:8098"})
//@EnableLocalHostFeign(serverNameAndUrl = {ServiceNameConst.SYSTEM_SERVICE + "=http://172.16.5.132:8098"})
public class ApplicationConfiguration {

}

3、AOP/连接复用注解

(1)介绍

@BeforeEach

@BeforeAll

@AfterForeach

@AfterAll

Java测试代码编写_测试类_02

执行顺序如下:

Java测试代码编写_测试类_03

(2)示例

@BeforeEach
void setUp() {
  System.out.println("测试开始");
}

@AfterEach
void tearDown() {
  System.out.println("测试结束");
}

4、断言Assertions

Assertions.assertEquals(a,b) and Assertions.assertNotEquals()
Assertions.assertArrayEquals(Object[] expected, Object[] actual)
Assertions.assertIterableEquals(Iterable<?> expected, Iterable> actual)
Assertions.assertLinesMatch()
Assertions.assertNotNull(Object actual) and Assertions.assertNull()
Assertions.assertNotSame(originalObject, cloneObject) and Assertions.assertSame()
Assertions.assertTimeout(Duration.ofMinutes(1), () -> return "success") and Assertions.assertTimeoutPreemptively()
Assertions.assertTrue() and Assertions.assertFalse()
Assertions.assertThrows()
Assertions.fail() // 仅仅使测试用例失败


二、接口测试

2.1 定义接口

Java测试代码编写_测试类_04

### 查询指定场景下逻辑实体的er关系,并封装成算法所需的结构
GET {{url}}/fabric/er/metabase/relation/test001
Content-Type:application/json
Cookie:{{Cookie}}


###查询客户表的字典信息,来源:ds_table_detail
POST {{url}}/metadata/exchange/pull/asset?source=testyu_oracle_51
Content-Type:application/json
Cookie:{{Cookie}}

["erp_coptc"]


### 微调er
PATCH {{url}}/fabric/er/3286495755174417787
Content-Type:application/json
Cookie:{{Cookie}}

{"entityCode":"ltc_customer_order_payment_info","tableNameList":["erp_copth","erp_coptc","erp_coptg"]}


### 更新执行状态
PUT {{url}}/metadata/executor/algorithm/status/54/3266820074312308163/3

2.2 定义环境和变量

根目录下定义http-client.env.json

Java测试代码编写_测试类_05

{
  "local": {
    "url": "http://127.0.0.1:9089",
    "Cookie": "",
    "rp-key": "20240204151533167653-39b3ad1b-cbb3-4a80-be94-06cf62b208bf",
    "er-key": "20240202151303664045-59c485db-3283-4e6e-bc08-19c5adf18720",
    "er-update-key": "20240204180210881546-3b54be0a-e034-4d97-b66a-8f1743815b62"
  	}
  }

三、MockITO

3.1 新增依赖

1、全部

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.8.5</version>
<scope>test</scope>
</dependency>

2、核心

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>2.7.19</version>
  <scope>test</scope>
</dependency>

3.2 Mock值

1、对象

//mock对象
@MockBean
protected UserRepository mockRepository;
或者
//先创建一个mock对象
UserService userService = Mockito.mock(UserService.class);

2、when thenReturn

@Test
public void testMockBeanAnnotation() {
  // 指定mock对象的行为
  Mockito.when(mockRepository.count()).thenReturn(123L);
  // 通过应用程序上下文获取Mock的对象
  // 也可以直接调用mockRepository.count()方法
  UserRepository userRepoFromContext = context.getBean(UserRepository.class);
  long userCount = userRepoFromContext.count();
  Assert.assertEquals(123L, userCount);
  // 验证被调用的就是Mock的对象
  Mockito.verify(mockRepository).count();
}

3.3 验证

1、方法调用

//验证userService的queryUser()方法是否被调用,并且参数时 "001"
Mockito.verify(userService).queryUser("001");

//上面例子,其实更加准确的说法是:验证userService的queryUser()方法得到了一次调用。相当于:
Mockito.verify(userService, Mockito.times(1)).queryUser("001");

//先创建一个mock对象
UserService userService = Mockito.mock(UserService.class);

//验证userService的queryUser()方法是否被调用,并且参数时是任意的
Mockito.verify(userService).queryUser(Mockito.any());

//验证userService的queryUser()方法是否被调用,并且参数时是任意字符串
Mockito.verify(userService).queryUser(Mockito.anyString());

四、其他测试介绍

4.1 自动化测试


4.2 冒烟测试


4.3 其他测试概念

1、自测


2、提测







标签:Java,queryUser,Mockito,Cookie,Assertions,userService,测试代码,编写,class
From: https://blog.51cto.com/liujinhui/9613805

相关文章

  • JAVA框架学习
    Struts--------------Struts2------------------>Hibernate---------------->iBatis(MyBatis)--------spring-------------------->springmvc-------->MyBatis-plus2000年2006年      2001年2002年2003年......
  • Java IO
    JavaIO基础知识IO流简介IO即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为IO流。IO流在Java中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。Ja......
  • Springboot在编写CRUD时,访问对应数据函数返回null
    1.我遇到了什么问题我在学习springboot,其中在编写CRUD时发现访问数据的函数执行下去返回值是null但是其它部分正常。下面是我的错误代码pojopublicclassBot{@TableId(type=IdType.AUTO)privateIntegerid;privateIntegeruser_id;privateStr......
  • 耗时一个月我问遍了身边的大佬,零基础自学Java的路线,适用程序员入门&进阶,Java学习路线,2
    作为一个有志于成为Java程序员的你,或许正处在技术生涯的起点,或许已经走过了入门的道路,期待跨越进阶的门槛?无论处于哪个阶段,一条明确的学习路线都至关重要,通过向众多行业大佬请教、反复探索和实践,总结出一套适用于零基础自学者大学四年Java学习路线,也同样适用于从初级到研发专家的学......
  • Java-10注解与反射
    注解注解(Annotation)也被称为元数据(Metadata),用于修饰包、方法、属性、构造器、局部变量等数据信息。注解不影响程序逻辑,但注解可以被编译或运行。在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的......
  • JAVA线程池
    线程池中的四种拒绝策略通常是指:AbortPolicy(默认策略):这是默认的拒绝策略。当线程池无法接受新任务时,它会抛出RejectedExecutionException异常。CallerRunsPolicy:在这种策略下,当线程池无法接受新任务时,会使用提交任务的线程来执行该任务。这样做的目的是为了降低新任务的提交......
  • java 内存布局
    面试题:初始化创建的对象有多大?答案:16字节Objecta=newObject();16字节String[]b=newString[2]();16字节/24字节对象的内存布局主体内容包括:对象头:MarkWord、指针、数字长度(数组对象才有)数据体:对象的数据,初始化一般为空数据对齐:要求对象大小,为8的倍数,而......
  • java lambda 求分组内最大值
    可以使用lambda表达式,比较方便,这里主要想说下思路问题,之前一个时受到数据库的影响,一个是对api理解程度不够的原因,实现方式见方式一;后来有种恍然大悟的感觉,改成了方式二的实现;方式一:先分组,组内过滤每一条数据Map<String,List<UserLog>>collect=list.stream().collect(Collec......
  • 32-Java中字符串、json、map之间的互相转换
    Java中字符串、json、map之间的互相转换 1.map转String、jsonObject对象packagemap;importjava.util.HashMap;importjava.util.Objects;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;publicclassMapDemo3{publicstatic......
  • 打开java语言世界通往字节码世界的大门——ASM字节码操作类库
    一、ASM介绍1、ASM是什么ASM是一个通用的Java字节码操作和分析框架。它可以用于修改现有类或直接以二进制形式动态生成类。ASM提供了一些常见的字节码转换和分析算法,可以从中构建定制的复杂转换和代码分析工具。ASM提供了与其他Java字节码框架类似的功能,但侧重于性能。由于它的......