java - 如何为 Rest 调用编写 Junit 测试用例?

标签 java junit junit4 junit5

谁能建议我如何为下面的类编写 JUnit:

@Controller
@RequestMapping(value = "/cutdata", consumes = "TEXT/XML")
public class CustController
{
Logger LOG = Logger.getLogger(CustController.class);


@Autowired
CustService custService;

@Autowired
MarCusService  marCustService;

@Resource(name = "CustValidator")
private CusValidator validator;

@Resource(name = "cmsSiteService")
private CMSSiteService cmsSiteService;

protected CMSSiteService getCmsSiteService()
{
    return cmsSiteService;
}
@RequestMapping(value = "/methodcall", method = RequestMethod.PUT)
public @ResponseBody ResponseEntity<?> methodCall(@RequestBody final CustDTO data)
        throws WebServicesException
{
    String statusCode = null;
    try {

        if (data.getGroup() != null && !data.getGroup().equals(String.valueOf(GroupEnum.ALL))) {
            validator.validate(data);
        }
    } catch (WebServicesException e) {

        return new ResponseEntity<>(e.getMessage(), HttpStatus.OK);
    }

    try
    {   

        final CMSSiteModel site = cmsSiteService.getCurrentSite();
        String currentSiteId=site.getUid() !=null ? site.getUid():"";
        if(StringUtils.contains(currentSiteId,Config.getParameter("****.siteuid")))

        {
            statusCode = marCustService.processData(data);
        }
        else
        {
            statusCode = custService.processData1(data);
        }

        final String[] message = statusCode.split(":");
        final String code = message[0];
        final String statusMessage = message[1];
        if (code.equalsIgnoreCase("200"))
        {
            return new ResponseEntity<>(statusMessage, HttpStatus.CREATED);
        }
        else if (code.equalsIgnoreCase("400"))
        {
            return new ResponseEntity<>(statusMessage, HttpStatus.BAD_REQUEST);
        }
    }
    catch (final Exception e)
    {
        LOG.error("log ::" + e);
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }

    return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}

}

我是编写 JUnit 测试用例的新手,我需要帮助,例如如何编写或如何启动 JUnit。

最佳答案

基本上,您需要使用 Spring 上下文来测试 Controller 类。

一个例子是这样的:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
public class CsrfShowcaseTests {

    @Autowired
    private WebApplicationContext context;

    private MockMvc mvc;

    @Before
    public void setup() {
        mvc = MockMvcBuilders
                .webAppContextSetup(context)
                .apply(springSecurity())
                .build();
    }

    @Test
    public void shouldTestMethodCall() {
        mockMvc.perform(put("/methodcall"))
               .andExpect(status.isOk());
    }
}

通过此测试,您可以将测试扩展到您的任何流程。 如果需要更多引用,可以查看Spring的文档here .

关于java - 如何为 Rest 调用编写 Junit 测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48135265/

相关文章:

java - 从 xsd 文件导出类型列表

java - 如何在 JUnit 测试中初始化对象?

java - 如何使用 Maven 运行单元测试,就好像它们在 JAR 中一样?

java - 使用 Unitils 针对 Postgres 数据库运行单元测试时出现 NullPointerException

java - Apache Camel - JUNIT 测试中端点上没有可用的消费者

java - GAE 数据存储游标是否永久且持久?

java - 所有安卓设备都有文件夹 "sdcard"吗?

java - 如何避免在这里创建类似对象的冗余实例?

java - JUnit4 @Test(expected=MyException.class) VS try/catch

ant - 运行所有标记为@Ignore 的测试