打印由Mockito运行的侦听端点

时间:2018-12-23 21:03:57

标签: java spring junit mockito spring-restdocs

我想为Rest api创建JUnit测试并生成api doc。我想测试这段代码:

其他控制器

@RestController
@RequestMapping("/transactions")
public class PaymentTransactionsController {

@Autowired
private PaymentTransactionRepository transactionRepository;

@GetMapping("{id}")
    public ResponseEntity<?> get(@PathVariable String id) {
        return transactionRepository
                .findById(Integer.parseInt(id))
                .map(mapper::toDTO)
                .map(ResponseEntity::ok)
                .orElseGet(() -> notFound().build());
    }
}

存储库界面

public interface PaymentTransactionRepository extends CrudRepository<PaymentTransactions, Integer>, JpaSpecificationExecutor<PaymentTransactions> {

    Optional<PaymentTransactions> findById(Integer id);
}

我尝试使用Mockito实现此JUnit5测试:

@ExtendWith({ RestDocumentationExtension.class, SpringExtension.class })
@SpringBootTest(classes = PaymentTransactionsController.class)
@WebAppConfiguration
public class PaymentTransactionRepositoryIntegrationTest {
    .....
    private MockMvc mockMvc;

    @MockBean
    private PaymentTransactionRepository transactionRepository;

    @BeforeEach
    void setUp(WebApplicationContext webApplicationContext,
              RestDocumentationContextProvider restDocumentation) {

        PaymentTransactions obj = new PaymentTransactions(1);

        Optional<PaymentTransactions> optional = Optional.of(obj);      

        PaymentTransactionRepository processor = Mockito.mock(PaymentTransactionRepository.class);
        Mockito.when(processor.findById(Integer.parseInt("1"))).thenReturn(optional);       

        this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
              .apply(documentationConfiguration(restDocumentation))
              .alwaysDo(document("{method-name}", preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint())))
              .build();
    }

    @Test
    public void testNotNull() {
        assertNotNull(target);
    }

    @Test
    public void testFindByIdFound() {
        Optional<PaymentTransactions> res = target.findById(Integer.parseInt("1"));
//        assertTrue(res.isPresent());
    }

    @Test
public void transactionsApi() throws Exception {

    PaymentTransactions obj = new PaymentTransactions(1);

    given(target.findById(anyInt())).willReturn(Optional.of(obj));

    this.mockMvc.perform(get("/transactions/{id}", 1)
            .accept("application/xml;charset=UTF-8"))
            .andExpect(status().isOk())
            .andDo(document("Transactions", preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint()),
                    links(linkWithRel("crud").description("The CRUD resource")),
                    responseFields(subsectionWithPath("_links").description("Links to other resources")),
                    responseHeaders(headerWithName("Content-Type")
                            .description("The Content-Type of the payload, e.g. `application/hal+json`"))));
}
}

我收到错误消息:

java.lang.AssertionError: Status expected:<200> but was:<404>

我如何打印由Mockito运行的侦听端点? 有什么办法找到它吗?

完整输出:https://pastebin.com/BGGy9E8Z

0 个答案:

没有答案