首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JUnit端到端集成测试

JUnit端到端集成测试
EN

Stack Overflow用户
提问于 2020-01-03 10:15:09
回答 2查看 164关注 0票数 0

我正在使用JUnit和Spring (不是Boot)进行端到端的集成测试。我想从POST请求一直测试到数据库。这是我的测试:

代码语言:javascript
运行
复制
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextHierarchy({
    @ContextConfiguration(classes = TestConfig.class),
    @ContextConfiguration(classes = OrderHdrController.class)
})
@ActiveProfiles("Test")
public class FilterActivityTest4 {

    MockMvc mockMvc;
    @Autowired
    private WebApplicationContext wac;
    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).dispatchOptions(true).build();
    }

    @Test
    public void testActivity() {

        OrderSearchDto orderSearchDto = new OrderSearchDto();
        OrderSearchPanelDto orderSearchPanelDto = new OrderSearchPanelDto();
        orderSearchPanelDto.setActivityTypes(Arrays.asList("TAKEOVER","DELIVERY"));
        orderSearchDto.setOrderSearchPanelDto(orderSearchPanelDto);

        try {
            MvcResult result = this.mockMvc.perform(post("/orders/getOrderList")
                    .content(asJsonString(orderSearchDto))).andDo(MockMvcResultHandlers.print())
                    .andExpect(status().isOk())
                    .andReturn();
            String content = result.getResponse().getContentAsString();
            System.out.print(content);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static String asJsonString(final Object obj) {
        try {
            final ObjectMapper mapper = new ObjectMapper();
            final String jsonContent = mapper.writeValueAsString(obj);
            return jsonContent;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }  
}

下面是我的TestConfig.class:

代码语言:javascript
运行
复制
    @Autowired
    private OrderManager orderManager;

    @Bean
    public OrderManager OrderManager() {
        return orderManager;
    }

在我的OrderHdr控制器类中:

代码语言:javascript
运行
复制
@Controller
@RequestMapping("/orders")
public class OrderHdrController {
    @Autowired
    private OrderManager orderManager;

    @RequestMapping(value = "/getOrderList", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> getOrderTables(OrderSearchDto orderSearchDto) {
         ...
         orderHdrTables = orderManager.findAllOrders(orderSearchDto);
         ...
    }
}

但是我的orderManager对象在我的控制器中是空的,导致在我运行测试时出现空指针异常。

问题是:如何实例化orderManager对象?是"Autowired“写的吗?

请帮帮忙。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-01-03 11:36:37

是,

您必须通过Autowired实例化OrderManager对象。

票数 0
EN

Stack Overflow用户

发布于 2020-01-03 16:02:38

您提供的测试代码实际上并不执行端到端集成测试,因为它只是测试Spring应用程序的Web层(控制器部分)。它不会引导整个Spring上下文,这将允许您将任何bean注入到测试代码中。

您可以删除TestConfig并使用以下命令模拟OrderManager bean:

代码语言:javascript
运行
复制
@MockBean
private OrderManager orderManager;

这使您可以使用Mockito控制OrderManager的行为。所有这些都在最后的following Spring guide中进行了描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59572437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档