繁体   English   中英

Java Spring Test Autowired Controller is null 错误

[英]Java Spring Test Autowired Controller is null error

我想使用 Spring(不是 Spring Boot)测试 Java Web 控制器。

我的控制器是

@Controller
@RequestMapping("/orders")
public class OrderHdrController {
    @RequestMapping(value = "/getOrderList", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> getOrderTables(OrderSearchDto orderSearchDto) { ... }
}

我的测试课是:

public class FilterActivityTest2 {

    @Autowired
    private OrderHdrController orderHdrController;

    @Test
    public void testActivity() {
        OrderSearchDto orderSearchDto = new OrderSearchDto();
        OrderSearchPanelDto orderSearchPanelDto = new OrderSearchPanelDto();
        orderSearchPanelDto.setActivityTypes(Arrays.asList("TAKEOVER","DELIVERY"));
        orderSearchDto.setOrderSearchPanelDto(orderSearchPanelDto);
        Map<String, Object>  result =  orderHdrController.getOrderTables(orderSearchDto);
        assertNotNull(result);
    }
}

我不想嘲笑任何对象。 我只想在控制器上一直运行测试到数据库。 但是当我调试到测试中时, testActivity 方法中的 orderHdrController 为空。

我做错了什么? 请帮助或向我询问更多信息。 谢谢。

@RunWith(SpringRunner.class)
@WebMvcTest(OrderHdrController.class)
public class FilterActivityTest2 {

    @Autowired
    private OrderHdrController orderHdrController;

    @Test
    public void testActivity() {
        OrderSearchDto orderSearchDto = new OrderSearchDto();
        OrderSearchPanelDto orderSearchPanelDto = new OrderSearchPanelDto();
        orderSearchPanelDto.setActivityTypes(Arrays.asList("TAKEOVER","DELIVERY"));
        orderSearchDto.setOrderSearchPanelDto(orderSearchPanelDto);
        Map<String, Object>  result =  orderHdrController.getOrderTables(orderSearchDto);
        assertNotNull(result);
    }
}

或者如果不使用任何 spring 或 junit 那么为什么使用 @test

只需创建一个主类

public class FilterActivityTest2{

    public static void main(String args[]){

 ....... put your tast case code here 

    }
}

您的FilterActivityTest2需要由 Spring 上下文管理,以便能够自动装配依赖项。

为此,请使用以下命令注释您的测试类:

@RunWith(SpringRunner.class)
@SpringBootTest

或者扩展已经有这些注解的主测试类。 如果您使用 spring 初始化程序创建了您的项目,您将在为您创建的测试中找到该类。

public class FilterActivityTest2 extends MyApplicationTests {

编辑

对于 Spring,您可以使用@ContextConfiguration 是一个很好的教程。
另请参阅此处的官方文档。

如果不使用 spring boot,则可以手动创建应用程序上下文

    @Before
    public void init() {
        ApplicationContext context = desired implementation;
        controller = context.getBean("bean name");
    }

但最好这样做

@RunWith(MockitoJUnitRunner.class)
public class FilterActivityTest2 {

    private OrderHdrController orderHdrController;

    @MockBean
    private Service service;
    @MockBean
    private  Dao dao;

    @Before
    public void init() {
        orderHdrController = new OrderHdrController(service, dao ....);
    }

    @Test
    ....
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM