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