testable-mock/docs/zh-cn/doc/setup.md
2021-02-02 07:49:20 +08:00

3.7 KiB
Raw Blame History

使用TestableMock

TestableMock是基于源码和字节码增强的Java单元测试辅助工具包含以下功能

  • 快速Mock任意调用使被测类的任意方法调用快速替换为Mock方法实现"指哪换哪"解决传统Mock工具使用繁琐的问题
  • 访问被测类私有成员:使单元测试能直接调用和访问被测类的私有成员,解决私有成员初始化和私有方法测试的问题
  • 辅助测试void方法利用Mock校验器对方法的内部逻辑进行检查解决无返回值方法难以实施单元测试的问题
  • 快速构造参数对象:生成任意多层嵌套的对象实例,并简化其内部成员赋值方式,解决被测方法参数初始化代码冗长的问题

在Maven项目中使用

在项目pom.xml文件中,增加testable-all依赖和maven-surefire-plugin配置,具体方法如下。

建议先添加一个标识TestableMock版本的property,便于统一管理:

<properties>
    <testable.version>0.4.11</testable.version>
</properties>

dependencies列表添加TestableMock依赖

<dependencies>
    <dependency>
        <groupId>com.alibaba.testable</groupId>
        <artifactId>testable-all</artifactId>
        <version>${testable.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

最后在build区域的plugins列表里添加maven-surefire-plugin插件(如果已包含此插件则只需添加<argLine>部分配置):

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/${testable.version}/testable-agent-${testable.version}.jar</argLine>
            </configuration>
        </plugin>
    </plugins>
</build>

若项目同时还使用了Jacocoon-the-fly模式(默认模式)统计单元测试覆盖率,则需在<argLine>配置中添加一个@{argLine}参数,添加后的配置如下:

<argLine>@{argLine} -javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/${testable.version}/testable-agent-${testable.version}.jar</argLine>

参见项目java-demopom.xmlkotlin-demopom.xml文件。

在Gradle项目中使用

build.gradle文件中添加TestableMock依赖:

dependencies {
    testImplementation('com.alibaba.testable:testable-all:0.4.11')
    testAnnotationProcessor('com.alibaba.testable:testable-processor:0.4.11')
}

然后在测试配置中添加javaagent

test {
    jvmArgs "-javaagent:${classpath.find { it.name.contains("testable-agent") }.absolutePath}"
}

参见项目java-demobuild.gradlekotlin-demobuild.gradle.kts文件。

若是基于Robolectric框架的Android项目则添加TestableMock依赖方法同上添加javaagent配置方法如下

android {
    testOptions {
        unitTests {
            all {
                jvmArgs "-javaagent:${classpath.find { it.name.contains("testable-agent") }.absolutePath}"
            }
        }
    }
}

完整示例参考issue-43