我尝试为一个方法创建两种情况:当响应包含一个元素列表和一个空列表时。我有BaseTestClass用于这两种情况,但响应体生成应该根据合约而不同。这可能吗?如果是,如何做到这一点?BaseTestClass如何知道调用哪个mock?
@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()
型
但它不起作用
1条答案
按热度按时间x7rlezfr1#
查看文档
我设法在同一个groovy文件中添加了多个合约,如下所示:
我的groovy文件
字符串
我的基类
型