- Springboot项目使用TestNG框架进行单元测试
- 1、前言
- 2、添加依赖
- 3、测试代码编写
- 3.1 CoreSpringBootStartUp文件
- 3.2 baseTest文件
- 3.3 OrderServiceTest
- 4、 问题与解决
- 4.1 mock失效
- 5、参考文献
TestNG包含了Junit4的核心功能,并且可以配合其他软件进行集成测试,功能十分强大,所以选择TestNG进行单元测试。
TestNG和Junit的区别可参考该文章https://blog.csdn.net/weixin_30808253/article/details/96516421
在SpringBoot项目的pom文件中添加依赖:
org.springframework.boot
spring-boot-starter-test
2.1.1.RELEASE
test
org.springframework.boot
spring-boot-starter-web
2.1.1.RELEASE
org.testng
testng
6.9.10
3、测试代码编写
文件结构如下图:
@EnableAsync
@EnableScheduling
@ServletComponentScan
@EnableAutoConfiguration
@SpringBootApplication(scanbasePackages = {"com.baidu"})
public class CoreSpringBootStartUp {
public static void main(String[] args) {
SpringApplication sa = new SpringApplication(CoreSpringBootStartUp.class);
sa.run(args);
}
}
3.2 baseTest文件
所有的测试文件需继承baseTest
@SpringBootTest(classes = CoreSpringBootStartUp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = CoreSpringBootStartUp.class)
public class baseTest extends AbstractTransactionalTestNGSpringContextTests {
}
3.3 OrderServiceTest
测试OrderService中的方法
public class OrderServiceTest extends baseTest {
@Autowired
@Qualifier("orderServiceImpl") //若orderService有多个实现,则需指定具体的实现
private OrderService orderService;
@Test(description = "测试的方法描述")
public void getOrderByIdTest() {
Order order = orderService.getOrderById(1L);
// 比较实际值是否是自己期望的值
Assert.assertEquals(order.getId(), 1L);
}
}
若要测试的方法中调用了其他service的方法,比如userService.getUserById(),这时候可以使用mock,示例如下
public class OrderServiceTest extends baseTest {
@Autowired
@Qualifier("orderServiceImpl") //若orderService有多个实现,则需指定具体的实现
@InjectMocks
private OrderService orderService;
@Mock
private UserService userService;
@BeforeMethod
public void setup() {
// 初始化
MockitoAnnotations.initMocks(this);
}
@Test(description = "测试的方法描述")
public void getOrderByIdTest() {
Mockito.when(userService.getUserById(Mockito.anyLong())).thenReturn(new User());
Order order = orderService.getOrderById(1L);
// 比较实际值是否是自己期望的值
Assert.assertEquals(order.getId(), 1L);
}
}
4、 问题与解决
4.1 mock失效
- 查看@Mock和@InjectMocks注解以及初始化方法是否添加
- 还有种可能如下,方法getUserById(Mockito.anyLong())需要传入的是Long类型数据,若传null会导致无效
Mockito.when(userService.getUserById(Mockito.anyLong())).thenReturn(new User());5、参考文献
- https://blog.csdn.net/weixin_30808253/article/details/96516421



