测试代码如下
@SpringBootTest
@Testcontainers
@AutoConfigureMockMvc
class ProductServiceApplicationTests {
static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:4.4.2");
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@DynamicPropertySource
static void setProperties(DynamicPropertyRegistry dynamicPropertyRegistry) {
dynamicPropertyRegistry.add("spring.data.mongodb.uri", mongoDBContainer::getReplicaSetUrl);
}
@Test
void shouldCreateProduct() throws Exception {
ProductRequest productRequest = getProductRequest();
String productRequestString = objectMapper.writeValueAsString(productRequest);
mockMvc.perform(MockMvcRequestBuilders.post("/api/product")
.contentType(MediaType.APPLICATION_JSON)
.content(productRequestString))
.andExpect(status().isCreated());
}
private ProductRequest getProductRequest() {
return ProductRequest.builder()
.name("Iphone 13")
.description("Iphone 13 is ready")
.price(BigDecimal.valueOf(1200))
.build();
}
}
1.出现报错: MongoDBContainer should be started first
Failed to bind properties under 'spring.data.mongodb.uri' to java.lang.String:
Reason: java.lang.IllegalStateException: MongoDBContainer should be started first
解决方式 添加注解@Container
@Container
static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:4.4.2");
2.出现报错:Could not find a valid Docker environment.
猜测docker容器没启动,启动docker,重新运行测试用例.
3.启动了docker,还是失败.
尝试在 ~/.testcontainers.properties
脚本中添加下面代码
#Modified by Testcontainers
#Wed Mar 04 17:59:09 MSK 2020
client.ping.timeout=60
docker.client.strategy=org.testcontainers.dockerclient.UnixSocketClientProviderStrategy
4.重新启动,运行成功.