4.9 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
- Auxiliary 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
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.6.4</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.6.4')
testAnnotationProcessor('com.alibaba.testable:testable-processor:0.6.4')
}
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 tested with
Robolectricframework, please use the same method to addTestableMockdependency as above, and addjavaagentconfiguration as follows:android { testOptions { unitTests { all { jvmArgs "-javaagent:${classpath.find { it.name.contains("testable-agent") }.absolutePath}" } } } }See issue-43 for 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> <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'See project
demo/spock-demofor a complete example.