我一直在尝试在生产者端的控制器内模拟服务
@Autowired
private Service service;
@PostMapping(path = "/getone", consumes = "application/json", produces = "application/json")
public ResponseEntity<Response> getone(@RequestBody Test[] test) {
String appId = Utils.getId();
return new ResponseEntity<>(service.pub(test,id), HttpStatus.OK);
}
下面是我的基本测试类的样子
@ExtendWith(SpringExtension.class)
@ActiveProfiles("test")
@SpringBootTest
@RunWith(PowerMockRunner.class)
public class ContractTest {
@Autowired
private WebApplicationContext context;
@Mock
private Service service;
@BeforeEach
void setup() {
mockStatic(Utils.class);
when(Utils.getId()).thenReturn("194");
Mockito.when(service.pub(Mockito.any(Test[].class),eq("194"))).thenReturn(TestUtils.publish_success_response());
StandaloneMockMvcBuilder standaloneMockMvcBuilder = MockMvcBuilders.standaloneSetup(publishApiController, this.publishService);
RestAssuredMockMvc.standaloneSetup(standaloneMockMvcBuilder);
}
实际的服务类在这里运行,而不是引起问题的mock?
2.如何在@before方法中测试失败场景?
1条答案
按热度按时间n7taea2i1#
@mock和@mockbean之间有一个重要的区别。为了你的测试你需要
@MockBean
当您将springbean替换为spring测试上下文的mock时。除此之外,你还混合了JUnit4(
@RunWith
)和junit 5(@ExtendWith
,@BeforeEach
).如果您只想使用
MockMvc
,您不必从整个spring上下文开始@SpringBootTest
. spring boot test提供了一个注解,用于仅启动mvc组件的切片上下文:@WebMvcTest
.对于你的静态模拟
Utils
类,您可以使用mockito(自版本3.4.0起)来减少附加依赖项的数量,并坚持springbootstarter测试提供的内容。可能的测试如下所示: