【问题标题】:@ModelAttribute in Spring Boot applicationSpring Boot 应用程序中的@ModelAttribute
【发布时间】:2017-10-29 11:06:18
【问题描述】:

我有一个 Spring Boot 应用程序(嵌入式 Tomcat、Thymeleaf 模板...) 这是我的一个控制器:

@Controller
@RequestMapping("/company")
public class CompanyController {

    @RequestMapping(value = { "/list" }, method = { RequestMethod.GET })
    public String companyList(Company company, ModelMap model) {
        return serverContextPath + COMPANY_LIST_VIEW_NAME;
    }

    @ModelAttribute("companies")
    public Iterable<Company> companies(){
        return companyService.findAll();
    }
}

我创建了这个 Junit 测试来验证我的控制器工作正常

@ContextConfiguration(classes = { MyApplicationConfig.class })
public class CompanyControllerTests {


    private CompanyController controller;

    @Value("${server.contextPath}")
    protected String serverContextPath;

    @Before
    public void setUp() throws Exception {
        controller = new CompanyController();
    }


    @Test
    public void testCompanyList() {

        ExtendedModelMap model = new ExtendedModelMap();
        String viewName = controller.companyList(new Company(), model);
        assertEquals(serverContextPath + CompanyController.COMPANY_LIST_VIEW_NAME, viewName);
        Iterable<Company> companies = (Iterable<Company>) model.get("companies");
        assertNotNull(companies);

    }    
}

但我有一个 AssertionError assertNotNull(companies);

【问题讨论】:

  • 那为什么要填写呢?您直接调用一个方法,您没有使用 Spring MVC 基础设施进行测试。
  • MockMvc 是您测试控制器所需要的。

标签: java spring spring-mvc spring-boot junit


【解决方案1】:

可能你需要用一些预期的结果来模拟这个调用:

companyService.findAll() 

能够在服务之外测试控制器

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2023-03-16
    • 2019-08-31
    相关资源
    最近更新 更多