我在Scala中编写了这个测试方法来测试REST服务。
@Test def whenRequestProductInfo() {
// When Request Product Info
forAll { (productId: Int) =>
val result = mockMvc().perform(get(s"/products/$productId")
.accept(MediaType.parseMediaType(APPLICATION_JSON_CHARSET_UTF_8)))
.andExpect(status.isOk)
.andExpect(content.contentType(APPLICATION_JSON_CHARSET_UTF_8))
.andReturn;
val productInfo = mapper.readValue(result.getResponse.getContentAsString, classOf[ProductInfo])
// At least one is not null
// assert(productInfo.getInventoryInfo != null)
}
}
但我想测试至少有一个productInfo.getInventoryInfo不为空而不是每个productInfo.getInventoryInfo都不为空。
答案 0 :(得分:2)
假设我们有一个产品ID列表:
val productIds: List[Int] = ???
我们应该将转化从productId
计算到productInfo
到另一个val
。 (我认为这种方法或类似的东西会存在于其他地方的代码中。)
val inventoryInfo = productIds.map { case productId =>
val result = mockMvc().perform(get(s"/products/$productId")
.accept(MediaType.parseMediaType(APPLICATION_JSON_CHARSET_UTF_8)))
.andExpect(status.isOk)
.andExpect(content.contentType(APPLICATION_JSON_CHARSET_UTF_8))
.andReturn
val productInfo = mapper.readValue(result.getResponse.getContentAsString, classOf[ProductInfo])
productInfo.getInventoryInfo
}
现在我们有一个库存信息列表,无论是哪种类型。我们可以使用atLeast
来检查集合中至少有一个库存信息不是null
。
atLeast(1, inventoryInfo) should not be null
ScalaTest似乎没有像forAll
这样的任何curried版本,所以语法差别很大,如果你需要做一堆计算,那就不太好了。
答案 1 :(得分:2)
forAll可以传递配置,以获得所需的成功评估次数和允许的失败评估次数。这应该可以实现您的目标。 Documentation here位于页面末尾。
示例:
forAll (minSuccessful(1)) { (productId: Int) => ...