如何使用Spring Boot和Spock运行测试容器

时间:2018-08-20 21:10:19

标签: spring docker spock testcontainers

我想在我的Spring Boot应用程序中使用带有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

1 个答案:

答案 0 :(得分:2)

请在您的 function AnyFunction(e){ /**** your code *****/ }; $(function () { $(window).bind('unload', function (e) { return AnyFunction(e); }); $(window).bind('beforeunload', function (e) { return AnyFunction(e); }); }); GenericContainer字段中删除static关键字。

静态字段不会在Spock框架中用@Shared注释,因此它们不会被视为规范字段的一部分。 Testcontainers-Spock依靠这些字段来识别GenericContainers。

但是,如果您需要@FieldMetadata修饰符,则可以解决以下问题:

static