testable-mock/docs/zh-cn/doc/setup.md

114 lines
4.4 KiB
Markdown
Raw Normal View History

2020-11-22 22:12:51 +08:00
使用TestableMock
---
2021-04-06 00:03:38 +08:00
`TestableMock`现在已不仅是一款轻量易上手的单元测试Mock工具更是以**简化Java单元测试**为目标的综合辅助工具集,包含以下功能:
2020-11-22 22:12:51 +08:00
2020-11-26 07:04:41 +08:00
- [快速Mock任意调用](zh-cn/doc/use-mock.md)使被测类的任意方法调用快速替换为Mock方法实现"指哪换哪"解决传统Mock工具使用繁琐的问题
- [访问被测类私有成员](zh-cn/doc/private-accessor.md):使单元测试能直接调用和访问被测类的私有成员,解决私有成员初始化和私有方法测试的问题
2021-03-24 23:51:19 +08:00
- [快速构造参数对象](zh-cn/doc/omni-constructor.md):生成任意复杂嵌套的对象实例,并简化其内部成员赋值方式,解决被测方法参数初始化代码冗长的问题
2020-11-26 07:04:41 +08:00
- [辅助测试void方法](zh-cn/doc/test-void-method.md)利用Mock校验器对方法的内部逻辑进行检查解决无返回值方法难以实施单元测试的问题
2020-11-22 22:12:51 +08:00
## 在Maven项目中使用
2020-12-12 00:05:53 +08:00
在项目`pom.xml`文件中,增加`testable-all`依赖和`maven-surefire-plugin`配置,具体方法如下。
2020-11-24 23:18:12 +08:00
建议先添加一个标识TestableMock版本的`property`,便于统一管理:
2020-11-22 22:12:51 +08:00
```xml
2020-11-24 23:18:12 +08:00
<properties>
2021-11-07 11:07:39 +08:00
<testable.version>0.7.0</testable.version>
2020-11-24 23:18:12 +08:00
</properties>
2020-11-22 22:12:51 +08:00
```
在`dependencies`列表添加TestableMock依赖
2020-11-22 22:12:51 +08:00
```xml
2020-11-24 23:18:12 +08:00
<dependencies>
<dependency>
<groupId>com.alibaba.testable</groupId>
2020-12-12 00:05:53 +08:00
<artifactId>testable-all</artifactId>
<version>${testable.version}</version>
2020-12-23 20:23:09 +08:00
<scope>test</scope>
</dependency>
2020-11-24 23:18:12 +08:00
</dependencies>
2020-11-22 22:12:51 +08:00
```
2020-12-12 00:05:53 +08:00
最后在`build`区域的`plugins`列表里添加`maven-surefire-plugin`插件(如果已包含此插件则只需添加`<argLine>`部分配置):
2020-11-24 23:18:12 +08:00
```xml
<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>
```
2020-11-22 22:12:51 +08:00
2020-11-24 23:18:12 +08:00
若项目同时还使用了`Jacoco`的`on-the-fly`模式(默认模式)统计单元测试覆盖率,则需在`<argLine>`配置中添加一个`@{argLine}`参数,添加后的配置如下:
```xml
<argLine>@{argLine} -javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/${testable.version}/testable-agent-${testable.version}.jar</argLine>
```
2020-11-22 22:12:51 +08:00
2020-12-01 20:20:44 +08:00
参见项目`java-demo`的[pom.xml](https://github.com/alibaba/testable-mock/blob/master/demo/java-demo/pom.xml)和`kotlin-demo`的[pom.xml](https://github.com/alibaba/testable-mock/blob/master/demo/kotlin-demo/pom.xml)文件。
2020-11-22 22:12:51 +08:00
## 在Gradle项目中使用
在`build.gradle`文件中添加`TestableMock`依赖:
2020-11-22 22:12:51 +08:00
```groovy
dependencies {
2021-11-07 11:07:39 +08:00
testImplementation('com.alibaba.testable:testable-all:0.7.0')
testAnnotationProcessor('com.alibaba.testable:testable-processor:0.7.0')
2020-11-22 22:12:51 +08:00
}
```
然后在测试配置中添加javaagent
```groovy
test {
jvmArgs "-javaagent:${classpath.find { it.name.contains("testable-agent") }.absolutePath}"
}
```
2020-12-01 20:20:44 +08:00
参见项目`java-demo`的[build.gradle](https://github.com/alibaba/testable-mock/blob/master/demo/java-demo/build.gradle)和`kotlin-demo`的[build.gradle.kts](https://github.com/alibaba/testable-mock/blob/master/demo/kotlin-demo/build.gradle.kts)文件。
2021-05-03 10:37:33 +08:00
> 若用于Android项目则添加`TestableMock`依赖方法同上添加javaagent配置方法如下
>
> ```groovy
> android {
> testOptions {
> unitTests {
> all {
> jvmArgs "-javaagent:${classpath.find { it.name.contains("testable-agent") }.absolutePath}"
> }
> }
> }
> }
> ```
>
2021-05-03 10:37:33 +08:00
> 完整代码可参考`demo/android-demo`示例项目。
2021-04-06 00:03:38 +08:00
2021-06-01 10:58:00 +08:00
> 若项目使用`Spock`测试框架,需指定`Groovy`编译生成的JVM **1.6或以上**版本字节码方法如下请根据实际使用的JVM版本修改属性值
2021-04-06 00:03:38 +08:00
>
> Maven项目在`pom.xml`中添加`<maven.compiler.source>`和`<maven.compiler.target>`属性,例如:
> ```xml
> <properties>
2021-06-01 10:58:00 +08:00
> <!-- 或 1.7/1.8/... -->
2021-04-06 00:03:38 +08:00
> <maven.compiler.source>1.6</maven.compiler.source>
> <maven.compiler.target>1.6</maven.compiler.target>
> </properties>
> ```
>
> Gradle项目在`build.gradle`中添加`sourceCompatibility`属性,例如:
> ```groovy
2021-06-01 10:58:00 +08:00
> sourceCompatibility = '6' // 或7/8/9/...
2021-04-06 00:03:38 +08:00
> ```
>
> 完整代码可参考`demo/spock-demo`示例项目。