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