5.1 KiB
Use TestableMock
TestableMock is now not only a lightweight and easy-to-use unit testing mock tool, but also a comprehensive set of auxiliary tools aimed at simplifying Java unit testing, including the following functions:
- Quickly mock arbitrary call: quickly replace any method invocation in the class under test with a mock method, solve the cumbersome use of traditional mock tools problem
- Access private members of the class under test: enable unit tests directly invoke or access private members of the class under test, solve the problems of private member initialization and private method testing
- Quickly construct complicated parameter object:generate arbitrarily nested object instances, simplify their internal member assignment methods, solve the problem of long initialization codes for method parameters
- Assist test void method: use the mock validator to check the internal logic of method, solve the problem that unit testing is difficult to implement to the method with no return value
- Quickly create collection instances: provide utility methods for collection creation, solve the problem of redundant codes during java test data preparation
Use in Maven project
In the project pom.xml file, add testable-all dependency and maven-surefire-plugin configuration, the specific method is as follows.
It is recommended to add a property field that identifies the TestableMock version, in order to simplify version management:
<properties>
<testable.version>0.7.9</testable.version>
</properties>
Add dependence of TestableMock inside dependencies field:
<dependencies>
<dependency>
<groupId>com.alibaba.testable</groupId>
<artifactId>testable-all</artifactId>
<version>${testable.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
Finally, add the maven-surefire-plugin plugin to the plugins list in the build area (if this plugin is already included, just add the <argLine> part of the configuration):
<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>
If the project also uses the on-the-fly mode of Jacoco (default mode) to calculate the unit test coverage, you need to add a @{argLine} parameter in the <argLine> configuration, after adding it The configuration is as follows:
<argLine>@{argLine} -javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/${testable.version}/testable-agent-${testable.version}.jar</argLine>
See the pom.xml file of project java-demo and the pom.xml file of project kotlin-demo.
Use in Gradle project
Add dependence of TestableMock in build.gradle file:
dependencies {
testImplementation('com.alibaba.testable:testable-all:0.7.9')
testAnnotationProcessor('com.alibaba.testable:testable-processor:0.7.9')
}
Then add javaagent to "test" configuration:
test {
jvmArgs "-javaagent:${classpath.find { it.name.contains("testable-agent") }.absolutePath}"
}
See the build.gradle file of project java-demo and the build.gradle.kts file of project kotlin-demo.
For Android project, please use the same method to add
TestableMockdependency as above, and addjavaagentconfiguration as follows:android { testOptions { unitTests { all { jvmArgs "-javaagent:${classpath.find { it.name.contains("testable-agent") }.absolutePath}" } } } }See project
demo/android-demofor a complete example.
If the project is using
Spocktest framework, you need to specify the bytecode version generated byGroovyto be 1.6 or above, the method is as follows (please modify the properties value according to the actual JVM version used).For Maven project, add
<maven.compiler.source>and<maven.compiler.target>properties inside thepom.xmlfile, e.g.<properties> <!-- or 1.7/1.8/... --> <maven.compiler.source>1.6</maven.compiler.source> <maven.compiler.target>1.6</maven.compiler.target> </properties>For Gradle project, add a
sourceCompatibilityproperty inside thebuild.gradlefile, e.g.sourceCompatibility = '6' // or 7/8/9/...See project
demo/spock-demofor a complete example.