在使用Mockito和JUnit进行Spring MVC测试时,堆栈溢出错误通常是由于递归调用或者循环引用导致的。为了解决这个问题,请尝试以下方法:
@MockBean
注解替换@InjectMocks
注解。@MockBean
是Spring Boot提供的用于测试的注解,它可以自动处理依赖注入,避免手动创建和注入mock对象。@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
private MyController myController;
@MockBean
private MyService myService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testMyController() {
// 测试代码
}
}
@Mock
注解替换@InjectMocks
注解,并在测试类中手动注入mock对象。@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
private MyController myController;
@Mock
private MyService myService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
myController.setMyService(myService);
}
@Test
public void testMyController() {
// 测试代码
}
}
@Spy
注解替换@InjectMocks
注解。@Spy
注解会创建一个部分mock的对象,这样可以在保留原有功能的同时,对部分方法进行mock。@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
private MyController myController;
@Spy
private MyService myService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testMyController() {
// 测试代码
}
}
spring-boot-starter-test
。领取专属 10元无门槛券
手把手带您无忧上云