spock spring 集成测试框架搭建心得

本文介绍了Spock测试框架,它以Groovy为脚本语言,测试脚本可读性好,mock和stub功能强大。还说明了在Spring Maven工程中使用Spock测试Java bean的方法,包括工程结构、Spring配置、测试代码示例。此外,阐述了结合spock - reports生成测试报告的设置,以及工程pom文件的主要配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spock测试框架,使用groovy作为脚本语言,开发出的测试脚本具有优良的阅读性,通过标签结构化测试代码。groovy的语法简洁强大,可以节省很多代码。闭包很强大。Spock的mock和stub功能比junit的mockito、jmock、easymock都要简单好用,在spring maven工程中,spock-spring起到一个桥梁作用,它集成spock和spring test,从而可以在spock测试框架里测试Java bean。

 

maven 工程结构:测试脚本放在src/test/groovy目录下,在project setting中设置groovy目录为testSources目录

spring 配置文件中声明的bean:

只需在测试类上加注解@ContextConfiguration,spock测试便可access到spring容器,为了验证待测试bean成功注入到spock测试框架中, 我们做如下测试:

 

@ContextConfiguration(locations = "classpath*:spring-config.xml")

class BaseSpec extends Specification {

 

}

 

@Title("跨店铺优惠券测试")

@Subject(CouponWriteService)

class UnionCouponSpec extends BaseSpec {

    @Autowired

    CouponWriteService couponWriteService

 

    def "验证待测接口成功注入"() {

 

        expect: "bean 成功注入"

        couponWriteService instanceof CouponWriteService

 

    }

 

}
 

 

运行测试,如下测试结果,表明待测bean成功注入到spock测试框架

结合spock-reports组件,spock框架可以生成漂亮的测试报告,包含spoc测试注解,标签注释内容等,还可配置在报告中展示测试代码,只需在报告*.properties文件中设置com.athaydes.spockframework.report.showCodeBlocks=true,下面生成的报告是不是很漂亮

报告详细设置可在 META-INF/services/com.athaydes.spockframework.report.IReportCreator.properties 目录下根据需要灵活配置,包括样式、输出目录、工程名称和版本、报告模板等

 

# Name of the implementation class of the report creator

# Currently supported classes are:

#   1. com.athaydes.spockframework.report.internal.HtmlReportCreator

#   2. com.athaydes.spockframework.report.template.TemplateReportCreator

com.athaydes.spockframework.report.IReportCreator=com.athaydes.spockframework.report.internal.HtmlReportCreator

 

# Set properties of the report creator

# For the HtmlReportCreator, the only properties available are

# (the location of the css files is relative to the classpath):

com.athaydes.spockframework.report.internal.HtmlReportCreator.featureReportCss=spock-feature-report.css

com.athaydes.spockframework.report.internal.HtmlReportCreator.summaryReportCss=spock-summary-report.css

com.athaydes.spockframework.report.internal.HtmlReportCreator.printThrowableStackTrace=false

com.athaydes.spockframework.report.internal.HtmlReportCreator.inlineCss=true

com.athaydes.spockframework.report.internal.HtmlReportCreator.enabled=true

 

# exclude Specs Table of Contents

com.athaydes.spockframework.report.internal.HtmlReportCreator.excludeToc=false

 

# Output directory (where the spock reports will be created) - relative to working directory

com.athaydes.spockframework.report.outputDir=build/spock-reports

 

# If set to true, hides blocks which do not have any description

com.athaydes.spockframework.report.hideEmptyBlocks=false

 

# Set the name of the project under test so it can be displayed in the report

com.athaydes.spockframework.report.projectName=

 

# Set the version of the project under test so it can be displayed in the report

com.athaydes.spockframework.report.projectVersion=Unknown

 

# Show the source code for each block

com.athaydes.spockframework.report.showCodeBlocks=false

 

# Set the root location of the Spock test source code (only used if showCodeBlocks is 'true')

com.athaydes.spockframework.report.testSourceRoots=src/test/groovy

 

# Set properties specific to the TemplateReportCreator

com.athaydes.spockframework.report.template.TemplateReportCreator.specTemplateFile=/templateReportCreator/spec-template.md

com.athaydes.spockframework.report.template.TemplateReportCreator.reportFileExtension=md

com.athaydes.spockframework.report.template.TemplateReportCreator.summaryTemplateFile=/templateReportCreator/summary-template.md

com.athaydes.spockframework.report.template.TemplateReportCreator.summaryFileName=summary.md

com.athaydes.spockframework.report.template.TemplateReportCreator.enabled=true

工程pom文件主要如下配置:

  1. 配置spring 框架依赖,为了spock能使用spring test的ApplicationContext,spring-test.jar必不可少,从而通过注解自动引入待测bean
  2. 配置spock 测试框架相关jar包,spock-core.jar强制引入
  3. 由于spock相对于spring框架是外来户,spock中的内省注解需要引入aspectjrt.jar才能被spring的aop调用
  4. 配置编译、测试、报告等插件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

 

    <groupId>com.jd.pop.qa.test.api</groupId>

    <artifactId>api-coupon-test</artifactId>

    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>

 

    <name>api-coupon-test</name>

    <url>http://maven.apache.org</url>

 

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <springframework.version>4.3.9.RELEASE</springframework.version>

    </properties>

 

    <dependencies>

        <!--<dependency>-->

            <!--<groupId>junit</groupId>-->

            <!--<artifactId>junit</artifactId>-->

            <!--<version>4.11</version>-->

            <!--<scope>test</scope>-->

        <!--</dependency>-->

 

        <!--system under test!-->

        <dependency>

            <groupId>com.jd.pop.soa.market</groupId>

            <artifactId>pop-market-center-api</artifactId>

            <version>2.0.5-SNAPSHOT</version>

            <scope>test</scope>

        </dependency>

 

        <!--springframework configuration!-->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-test</artifactId>

            <version>${springframework.version}</version>

        </dependency>

 

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context</artifactId>

            <version>${springframework.version}</version>

        </dependency>

 

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context-support</artifactId>

            <version>${springframework.version}</version>

        </dependency>

 

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-beans</artifactId>

            <version>${springframework.version}</version>

        </dependency>

 

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

            <version>${springframework.version}</version>

        </dependency>

 

        <!--spock and groovy configuration start! -->

 

        <dependency>

            <groupId>org.aspectj</groupId>

            <artifactId>aspectjrt</artifactId>

            <version>1.8.0</version>

        </dependency>

 

        <dependency>

        <groupId>org.codehaus.groovy</groupId>

        <artifactId>groovy-all</artifactId>

        <version>2.4.4</version>

        <scope>test</scope>

        </dependency>

 

        <!-- https://mvnrepository.com/artifact/org.spockframework/spock-core -->

        <dependency>

            <groupId>org.spockframework</groupId>

            <artifactId>spock-core</artifactId>

            <version>1.1-groovy-2.4</version>

            <scope>test</scope>

        </dependency>

 

        <!-- https://mvnrepository.com/artifact/org.spockframework/spock-spring 方便集成spring test-->

        <dependency>

            <groupId>org.spockframework</groupId>

            <artifactId>spock-spring</artifactId>

            <version>1.1-groovy-2.4</version>

            <scope>test</scope>

        </dependency>

 

        <!-- https://mvnrepository.com/artifact/com.athaydes/spock-reports -->

        <!--设置报告模板,可参考https://github.com/renatoathaydes/spock-reports 介绍配置

        com.athaydes.spockframework.report.IReportCreator.properties-->

        <dependency>

            <groupId>com.athaydes</groupId>

            <artifactId>spock-reports</artifactId>

            <version>1.3.1</version>

            <scope>test</scope>

        </dependency>

 

        <!-- // if you don't already have slf4j-api and an implementation of it in the classpath, add this! -->

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>slf4j-api</artifactId>

            <version>1.7.13</version>

            <scope>test</scope>

        </dependency>

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>slf4j-simple</artifactId>

            <version>1.7.13</version>

            <scope>test</scope>

        </dependency>

 

    </dependencies>

 

    <build>

        <plugins>

            <plugin>

                <groupId>org.codehaus.gmavenplus</groupId>

                <artifactId>gmavenplus-plugin</artifactId>

                <version>1.5</version>

                <executions>

                    <execution>

                        <goals>

                            <goal>addTestSources</goal>

                            <!--<goal>compile</goal>-->

                            <goal>testCompile</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.3</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                </configuration>

            </plugin>

 

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-surefire-plugin</artifactId>

                <version>2.18.1</version>

                <configuration>

                    <includes>

                        <include>**/*Test.java</include>

                        <include>**/*Spec.java</include>

                        <!--<include>**/*Test.groovy</include>-->

                        <!--<include>**/*Spec.groovy</include>-->

                    </includes>

                </configuration>

            </plugin>

        </plugins>

    </build>

 

    <!--spock and groovy configuration end! -->

 

</project>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值