如何为Hybris OCC控制器编写单元测试

时间:2018-04-16 15:13:53

标签: hybris

我们正在为商业webservices(OCC)控制器编写单元测试,例如CartsControllers,UsersController等。这些控制器中的几乎所有方法都返回Web服务DTO,即以* WsDTO结尾的方法。此对象转换由dataMapper完成,它是spring Web应用程序上下文的一部分。我们面临的挑战是单元测试或集成测试无法访问Web应用程序上下文并从那里获取bean。如果没有这个,90%的商业webservices(OCC)控制器方法都是不可测试的,因为它们都返回DTO。模拟dataMapper本身不会实现任何目标,因为这会破坏编写测试的目的。

请帮助!!

1 个答案:

答案 0 :(得分:0)

我可以就如何开始为OCC控制器编写测试用语提出一些观点。

假设你想测试CartsControllers - >您在自定义@RequestMapping(value = "/{cartId}", method = RequestMethod.GET) @ResponseBody public CartWsDTO getCart(@RequestParam(required = false, defaultValue = DEFAULT_FIELD_SET) final String fields) { // CartMatchingFilter sets current cart based on cartId, so we can return cart from the session return getDataMapper().map(getSessionCart(), CartWsDTO.class, fields); } 扩展程序中编写的getCart方法。

import static org.fest.assertions.Assertions.assertThat;

@NeedsEmbeddedServer(webExtensions = { "customlswebservices", "oauth2" })
@IntegrationTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class CartWebServiceIntegrationTest extends AbstractCoreIntegrationTest
{

   private WsSecuredRequestBuilder wsSecuredRequestBuilder;

   @Before
   public void beforeTest() throws Exception
   {
       wsSecuredRequestBuilder = new WsSecuredRequestBuilder() //
            .extensionName("customlswebservices") //
            .path("v2") //
            .client("trusted_client", "secret") //
            .grantClientCredentials();
   }

   @Test
   public void testGetCart()
   {
        final Response wsResponse = wsSecuredRequestBuilder //
            .path("electronics") // Put your custom wcms site here
            .path("users") //
            .path("test@test.com") // Add current user id here
            .path("carts") //
            .path("100038383") // Cart ID
            .queryParam("fields", "DEFAULT") //
            .build() //
            .get(); //

       assertThat(wsResponse).isNotNull();
       assertThat(wsResponse.getStatus()).isEqualTo(HttpServletResponse.SC_OK);

       final CartWsDTO cartWsDTO = wsResponse.readEntity(CartWsDTO.class);
       assertThat(cartWsDTO).isNotNull();
    }

  }

集成测试:

{{1}}

希望这可以帮助你。