@ActiveProfiles("test")
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@DirtiesContext
@AutoConfigureMessageVerifier
public class BaseTestClass {
@Autowired
private MyController myController;
@MockBean
private MyService myService;
@BeforeEach
public void SetUp() {
StandaloneMockMvcBuilder standaloneMockMvcBuilder
= MockMvcBuilders.standaloneSetup(channelController);
standaloneMockMvcBuilder.setControllerAdvice(new MyExceptionHandler());
standaloneMockMvcBuilder.setMessageConverters(new MappingJackson2HttpMessageConverter());
RestAssuredMockMvc.standaloneSetup(standaloneMockMvcBuilder);
//mockGetAllChannels(); // when it was the only contract, mock was called here
}
@Test
void testChannelsOk() {
mockGetAllChannels(createChannelList());
}
@Test
void testEmptyList() {
mockGetAllChannels(Collections.emptyList());
}
private void mockGetAllChannels(List<ChannelResponse.Channel> channelList) {
doReturn(ChannelResponse.builder()
.channels(channelList)
.build())
.when(myService)
.getAllChannels();
}
private List<ChannelResponse.Channel> createChannelList() {
//generation logic
}
Groovy 文件:
[
Contract.make {
name("two channels")
request {
method 'GET'
url('/channels')
headers {
header('Content-Type', 'application/json;charset=UTF-8')
}
}
response {
status 200
body(
channels: [[
id : anyNonBlankString(),
name : anyNonBlankString(),
]
]
)
}
},
Contract.make {
name("empty list")
request {
method 'GET'
url('/channels')
headers {
header('Content-Type', 'application/json;charset=UTF-8')
}
}
response {
status 200
body(
channels: []
)
}
}
]
我也尝试将其放在单独的文件中,我不确定哪种方法更好。
我看到过这种做多个合约的例子:
@Test
void testEmptyList()
但是不起作用。
请告诉我您是否仍在同一条船上或能够继续前进吗?