Spring Boot 使用 Mockito 进行单元测试
Spring Boot 单元测试 About 2,438 words示例
@ExtendWith({MockitoExtension.class})
public class HelloServiceTests {
@InjectMocks
private HelloService helloService = new HelloServiceImpl();
@Mock
private UserMapper userMapper;
// @Spy
// private HiService hiService = new HiServiceImpl();
@Mock
private HiService hiService = new HiServiceImpl();
// @Spy
// private HiService hiService;
@BeforeEach
public void init() {
System.out.println("init");
User mockUser = new User();
mockUser.setId(2);
Mockito.when(userMapper.getUserById(1)).thenReturn(mockUser);
}
// @BeforeAll 必须是 static 方法
@BeforeAll
public static void beforeAll() {
System.out.println("beforeAll");
}
// @AfterAll 必须是 static 方法
@AfterAll
public static void afterAll() {
System.out.println("afterAll");
}
@Test
@DisplayName("测试接口1")
public void test1() {
Response response = helloService.sayHello(1);
Assertions.assertEquals(2, ((User) response.getData()).getId());
}
@Test
@DisplayName("测试接口2")
public void test2() {
Response response = helloService.sayHello(1);
Assertions.assertNotEquals(3, ((User) response.getData()).getId());
}
}
public interface HelloService {
Response sayHello(int id);
}
@Service
public class HelloServiceImpl implements HelloService {
@Resource
private UserMapper userMapper;
@Resource
private HiService hiService;
@Override
public Response sayHello(int id) {
System.out.println("HelloServiceImpl sayHello");
hiService.sayHi();
User user = userMapper.getUserById(id);
return Response.builder().data(user).build();
}
}
@Mapper
public interface UserMapper {
@Select("select * from t_user where id = #{id}")
User getUserById(@Param("id") int id);
}
public interface HiService {
int sayHi();
}
@Service
public class HiServiceImpl implements HiService {
@Override
public int sayHi() {
System.out.println("HiServiceImpl sayHi");
return 100;
}
}
@InjectMocks
需要被单元测试的类,该类中包含了其他依赖注入的组件,使用@InjectMocks
表示其他依赖注入的组件是使用@Mock
模拟的代理组件,不会走真实的方法。
@Mock
模拟的组件,通常是标注于@InjectMocks
中注入的组件。会被代理,单元测试时不走真实方法。
比如模拟@Repository
数据库访问对象,这样可以在单元测试时不链接数据库。
@Spy
真实对象,会走真实的方法。
注意:如果标注的是接口类型的组件,需要显示的new
出实现类对象,否则@Spy
的作用和@Mock
一致。
MockitoExtension
@ExtendWith({MockitoExtension.class})
表示使用Mockito
功能
Views: 1,260 · Posted: 2022-10-18
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...