首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Spring App中将MockitoMVC与Junit一起使用时出现堆栈溢出错误

在使用Mockito和JUnit进行Spring MVC测试时,堆栈溢出错误通常是由于递归调用或者循环引用导致的。为了解决这个问题,请尝试以下方法:

  1. 检查测试类和被测试类的依赖关系,确保没有循环引用。如果有循环引用,需要重新设计类的结构,以消除循环依赖。
  2. 使用@MockBean注解替换@InjectMocks注解。@MockBean是Spring Boot提供的用于测试的注解,它可以自动处理依赖注入,避免手动创建和注入mock对象。
代码语言:javascript
复制
@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() {
        // 测试代码
    }
}
  1. 如果问题仍然存在,尝试使用@Mock注解替换@InjectMocks注解,并在测试类中手动注入mock对象。
代码语言:javascript
复制
@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() {
        // 测试代码
    }
}
  1. 如果以上方法都无法解决问题,可以尝试使用@Spy注解替换@InjectMocks注解。@Spy注解会创建一个部分mock的对象,这样可以在保留原有功能的同时,对部分方法进行mock。
代码语言:javascript
复制
@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() {
        // 测试代码
    }
}
  1. 如果问题仍然存在,可以考虑使用其他测试框架,如TestNG,或者使用Spring Boot的测试模块,如spring-boot-starter-test
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券