[英]Spring testing annotations
我最近一直在做一个个人项目,看着我的测试文件,我意识到我有一些关于 spring 注释的内容:
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class BookingServicesTests {
private MockMvc mvc;
@Mock
private BookingRepository bookingRepository;
@InjectMocks
private BookingResource bookingController;
@Before
public void setup() {
JacksonTester.initFields(this, new ObjectMapper());
mvc = MockMvcBuilders
.standaloneSetup(bookingController)
.setControllerAdvice(new ConflictExceptionController())
.build();
}
...
}
所以问题是@SpringBootTest
用于使用真实的 HTTP 方法测试您的应用程序。 但是在我的setup
方法中,我包含了一个MockMvcBuilders
语句,它是一个独立的测试(没有服务器和应用程序上下文)。
我的问题是:
MockMvcBuilder
我可以摆脱@SpringBootTest
吗?谢谢
使用其中之一,而不是两者。 你只允许一个 JUnit 的@runwith()
并且你传入的值,无论是SpringRunner.class
还是MockitoJUnitRunner.class
,都有非常不同的行为。
因此,您发布的代码不正确,因为当您的测试类“与MockitoJUnitRunner
运行”时, @SpringBootTest
将尝试加载应用程序上下文。 因此@SpringBootTest
应该与@runWith(SpringRunner.class)
一起使用,因此
@RunWith(SpringRunner.class)
@WebMvcTest(BookingResource.class) // multiple controller class could go here
@AutoConfigureMockMvc
public class BookingServicesTests {
@Autowired
private MockMvc mvc;
@MockBean
private BookingRepository bookingRepository;
...
}
请注意我如何用@SpringBootTest()
替换@WebMvcTest()
。 这是因为@WebMvcTest()
只扫描@Controller
组件并为web 层加载配置,而@SpringBootTest()
则为整个应用程序这样做。
或者你在没有 Spring 的情况下对 Mockito 做了什么:
@RunWith(MockitoJUnitRunner.class)
public class BookingServicesTests {
private MockMvc mvc;
@Mock
private BookingRepository bookingRepository;
@InjectMocks
private BookingResource bookingController;
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.