如何 运行 使用 spring 引导和 spock 测试容器
How to run test Containers with spring boot and spock
我想在我的 spring 引导应用程序上使用带有 spock 的测试容器。
这些是我的依赖项:
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-redis')
compile('org.springframework.boot:spring-boot-starter-web')
compile 'org.testcontainers:spock:1.8.3'
runtime('org.springframework.boot:spring-boot-devtools')
compile 'org.codehaus.groovy:groovy-all:2.4.15'
compileOnly('org.projectlombok:lombok')
compile 'org.testcontainers:testcontainers:1.8.3'
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile "org.spockframework:spock-core:1.1-groovy-2.4-rc-4"
testCompile "org.spockframework:spock-spring:1.1-groovy-2.4-rc-4"
testCompile 'com.github.testcontainers:testcontainers-spock:-SNAPSHOT'
}
我已经像下面这样初始化了我的测试:
@SpringBootTest
@Testcontainers
class ProductRedisRepositoryTest extends Specification {
@Autowired
ProductRedisRepository productRedisRepository
@Autowired
TestComponent testComponent
static Consumer<CreateContainerCmd> cmd = { -> e.withPortBindings(new PortBinding(Ports.Binding.bindPort(6379), new ExposedPort(6379)))}
@Shared
public static GenericContainer redis =
new GenericContainer("redis:3.0.2")
//.withExposedPorts(6379)
.withCreateContainerCmdModifier(cmd)
def "check redis repository save and get"(){
given:
Product product = Product.builder()
.brand("brand")
.id("id")
.model("model")
.name( "name")
.build()
when:
productRedisRepository.save(product)
Product persistProduct = productRedisRepository.find("id")
then:
persistProduct.getName() == product.getName()
}
}
但是当我运行测试时它没有启动redis容器。
我的错误是什么。我该怎么做。
我的 springBootVersion = '2.0.4.RELEASE' 我正在使用 Intelij。
这是日志输出:LOG
请删除 @Shared
GenericContainer 字段中的 static
关键字。
Spock 框架不会用 @FieldMetadata
注释静态字段,因此它们不会被视为规范字段的一部分。
Testcontainers-Spock 依靠这些字段来识别 GenericContainers。
如果您需要 static
修饰符,您可以像这样解决这个问题:
...
public static GenericContainer staticRedis =
new GenericContainer("redis:3.0.2")
//.withExposedPorts(6379)
.withCreateContainerCmdModifier(cmd)
@Shared
public GenericContainer redis = staticRedis
...
我想在我的 spring 引导应用程序上使用带有 spock 的测试容器。
这些是我的依赖项:
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-redis')
compile('org.springframework.boot:spring-boot-starter-web')
compile 'org.testcontainers:spock:1.8.3'
runtime('org.springframework.boot:spring-boot-devtools')
compile 'org.codehaus.groovy:groovy-all:2.4.15'
compileOnly('org.projectlombok:lombok')
compile 'org.testcontainers:testcontainers:1.8.3'
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile "org.spockframework:spock-core:1.1-groovy-2.4-rc-4"
testCompile "org.spockframework:spock-spring:1.1-groovy-2.4-rc-4"
testCompile 'com.github.testcontainers:testcontainers-spock:-SNAPSHOT'
}
我已经像下面这样初始化了我的测试:
@SpringBootTest
@Testcontainers
class ProductRedisRepositoryTest extends Specification {
@Autowired
ProductRedisRepository productRedisRepository
@Autowired
TestComponent testComponent
static Consumer<CreateContainerCmd> cmd = { -> e.withPortBindings(new PortBinding(Ports.Binding.bindPort(6379), new ExposedPort(6379)))}
@Shared
public static GenericContainer redis =
new GenericContainer("redis:3.0.2")
//.withExposedPorts(6379)
.withCreateContainerCmdModifier(cmd)
def "check redis repository save and get"(){
given:
Product product = Product.builder()
.brand("brand")
.id("id")
.model("model")
.name( "name")
.build()
when:
productRedisRepository.save(product)
Product persistProduct = productRedisRepository.find("id")
then:
persistProduct.getName() == product.getName()
}
}
但是当我运行测试时它没有启动redis容器。 我的错误是什么。我该怎么做。
我的 springBootVersion = '2.0.4.RELEASE' 我正在使用 Intelij。
这是日志输出:LOG
请删除 @Shared
GenericContainer 字段中的 static
关键字。
Spock 框架不会用 @FieldMetadata
注释静态字段,因此它们不会被视为规范字段的一部分。
Testcontainers-Spock 依靠这些字段来识别 GenericContainers。
如果您需要 static
修饰符,您可以像这样解决这个问题:
...
public static GenericContainer staticRedis =
new GenericContainer("redis:3.0.2")
//.withExposedPorts(6379)
.withCreateContainerCmdModifier(cmd)
@Shared
public GenericContainer redis = staticRedis
...