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


    转载:http://blog.csdn.net/hankle_xu/article/details/77531880
    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>
  • 相关阅读:
    CSS 之 样式优先级机制
    SQL Server 之 修改时不允许保存更改
    IP_TOS选项
    eXosip2代码分析
    Ubuntu下关闭apache和mysql的开机启动
    linphone3.4.0代码分析
    XMPP/Jingle Vs SIP/SIMPLE 的简单介绍
    git命令常见问题总结
    正向代理与反向代理的区别
    SIP中OPTIONS方法的用法及示例
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/8442444.html
Copyright © 2020-2023  润新知