java—如何在producer for spring云契约的controller中模拟服务

xkftehaa  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(351)

我一直在尝试在生产者端的控制器内模拟服务

@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方法中测试失败场景?

n7taea2i

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测试提供的内容。
可能的测试如下所示:

// @ExtendWith(SpringExtension.class) not needed with recent Spring Boot versions
@ActiveProfiles("test")
@WebMvcTest
public class ContractTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private Service service;

    @Test
    void test() {

     try(MockedStatic<Utils> mockedUtils = Mockito.mockStatic(Utils.class)) {
        mockedUtils.when(Utils::getId).thenReturn("194");

        when(service.pub(Mockito.any(Test[].class),eq("194"))).thenReturn(TestUtils.publish_success_response());
        // ... your test
     }

    }
}

相关问题