[英]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.