簡體   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