工作日记2 Springboot+junit单元测试

Springboot+junit单元测试

  今天leader让我写好需求以后做一下单元测试,验证自己的代码逻辑是否正确。于是我很自然的就Alt+enter:

在这里插入图片描述
在这里插入图片描述

选中两个要测试的方法然后点击ok。生成的测试类如下:

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
public class MyPasswordEncoderTest {

    @Autowired
    private MyPasswordEncoder myPasswordEncoder;

    @Test
    public void encode() {
        myPasswordEncoder.encode("1234567");
    }

    @Test
    public void matches() {
    }
}

然后在Test类中测试encode方法果断报错
在这里插入图片描述
很明显的这个NullPointerException异常应该就是@Autowired注入的实例不存在报的错误了。普通的测试类无法获取到bean,所以才会报空指针。于是我添加以下注释:

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;

@RunWith(SpringRunner.class) //运行器,指定用什么容器来运行
@SpringBootTest
public class MyPasswordEncoderTest {

    @Autowired
    private MyPasswordEncoder myPasswordEncoder;

    @Test
    public void encode() {
        myPasswordEncoder.encode("1234567");
    }

    @Test
    public void matches() {
    }
}

然后跑出来就成功了。最简单的单元测试就这样完成了,但是如果要比较实际返回值和预期值怎么办呢?可以使用junit自带的assertXXX系列的比较方法,这里就举例assertEquals比较方法

//import static org.junit.Assert.assertEquals;
assertEquals("预期值","实际值"));

那么我们执行测试类不可能一直手点一个个测试类执行,那也太没有效率了,于是我们可以管理测试类,于是我在测试启动类中进行管理

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
//import org.springframework.test.context.junit4.SpringRunner;

//@RunWith(SpringRunner.class)
@RunWith(Suite.class) //将运行器指定为Suite
@SpringBootTest
@Suite.SuiteClasses({
		//	按顺序执行填入的类
        test1.class,
        test2.class,
        test3.class,
        test4.class,
        test5.class,
        
})
public class TestApplicationTests {

}

但是这样类的执行顺序是指定了,但是测试类中的测试方法的执行顺序却没有指定,那么怎么指定测试类中方法的顺序呢。

//采用下方的注解控制
@FixMethodOrder(value)
/*
MethodSorters.JVM
Leaves the test methods in the order returned by the JVM. Note that the order from the JVM 
may vary from run to run (按照JVM得到的方法顺序,也就是代码中定义的方法顺序)

MethodSorters.DEFAULT(默认的顺序)
Sorts the test methods in a deterministic, but not predictable, order() 
(以确定但不可预期的顺序执行)

MethodSorters.NAME_ASCENDING
Sorts the test methods by the method name, in lexicographic order, with Method.toString() used as a tiebreaker 
(按方法名字母顺序执行)
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于构建Java应用程序的开源框架,它提供了一种简化了配置的方式来快速构建应用程序。JUnit是一个用于编写和运行单元测试的开源测试框架,而Mockito是一个用于创建和管理模拟对象的Java库。 下面是一个使用Spring BootJUnit和Mockito进行单元测试的示例: 假设我们有一个UserService类,它依赖于一个UserRepository接口来访问数据库并进行一些操作。我们想要对UserService的方法进行单元测试。 首先,我们需要创建一个测试类,命名为UserServiceTest。在测试类中,我们将使用JUnit的注解来标记测试方法,并使用Mockito来创建模拟对象。示例代码如下: ```java @RunWith(MockitoJUnitRunner.class) public class UserServiceTest { @InjectMocks private UserService userService; @Mock private UserRepository userRepository; @Test public void testGetUserById() { // 配置模拟对象的行为 User user = new User("1", "John"); when(userRepository.findById("1")).thenReturn(user); // 调用被测试的方法 User result = userService.getUserById("1"); // 验证结果 assertEquals("John", result.getName()); } } ``` 在上面的示例中,我们使用了@RunWith注解来指定使用MockitoJUnitRunner运行测试,这样就能自动创建和管理模拟对象。使用@InjectMocks注解将被测试的对象自动注入到测试类中,使用@Mock注解创建模拟对象。 在testGetUserById方法中,我们首先使用when方法配置userRepository模拟对象的行为,表示当传入参数为"1"时,返回一个指定的User对象。 然后,我们通过调用userService的getUserById方法来测试该方法的逻辑。最后,使用assertEquals断言来验证结果是否符合预期。 以上就是一个使用Spring BootJUnit和Mockito进行单元测试的示例。通过使用Mockito创建模拟对象,我们可以更容易地测试各个方法的逻辑,而不依赖于实际的数据库。这样可以提高测试效率并确保代码的质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值