diff --git a/README.md b/README.md
index 9a3ce22..8e94ccb 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
换种思路写Mock,让单元测试更简单。
-无需初始化,不挑测试框架,甭管要换的方法是被测类的私有方法、静态方法还是其他任何类的成员方法,也甭管要换的对象是怎么创建的。写好Mock方法,加个@TestableMock注解,一切统统搞定。
+无需初始化,不挑测试框架,甭管要换的方法是被测类的私有方法、静态方法还是其他任何类的成员方法,也甭管要换的对象是怎么创建的。写好Mock方法,加个`@TestableMock`注解,一切统统搞定。
文档:https://alibaba.github.io/testable-mock/
diff --git a/demo/java-demo/pom.xml b/demo/java-demo/pom.xml
index fbec31f..ded34aa 100644
--- a/demo/java-demo/pom.xml
+++ b/demo/java-demo/pom.xml
@@ -11,7 +11,7 @@
1.8
1.8
- 0.3.1-SNAPSHOT
+ 0.3.1
@@ -36,26 +36,26 @@
maven-surefire-plugin
3.0.0-M5
-
-
-
-
-
-
-
-
- com.alibaba.testable
- testable-maven-plugin
- ${testable.version}
-
-
- prepare
-
- prepare
-
-
-
-
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ @{argLine} -javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/${testable.version}/testable-agent-${testable.version}.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
org.jacoco
jacoco-maven-plugin
diff --git a/demo/kotlin-demo/pom.xml b/demo/kotlin-demo/pom.xml
index e8ff31d..6d692e7 100644
--- a/demo/kotlin-demo/pom.xml
+++ b/demo/kotlin-demo/pom.xml
@@ -13,7 +13,7 @@
1.3.72
1.8
1.8
- 0.3.1-SNAPSHOT
+ 0.3.1
diff --git a/docs/zh-cn/README.md b/docs/zh-cn/README.md
index 59587cf..01a8317 100644
--- a/docs/zh-cn/README.md
+++ b/docs/zh-cn/README.md
@@ -7,4 +7,6 @@ TestableMock简介
然而当下主流的Mock框架在实现Mock功能时,需要开发者操心的事情实在太多:Mock框架如何初始化、与所用的单元测试框架是否兼容、要被Mock的方法是不是私有的、是不是静态的、被Mock对象是new出来的还是注入的、怎样把被测对象送回被测类里...这些非关键的额外工作极大分散了使用Mock工具应有的乐趣。
-为此,我们开发了`TestableMock`,**一款特立独行的轻量Mock工具**。
+于是,我们开发了`TestableMock`,**一款特立独行的轻量Mock工具**。
+
+
diff --git a/docs/zh-cn/doc/known-issues.md b/docs/zh-cn/doc/known-issues.md
deleted file mode 100644
index 2cf83d7..0000000
--- a/docs/zh-cn/doc/known-issues.md
+++ /dev/null
@@ -1,46 +0,0 @@
-已知缺陷
----
-
-#### 1. 访问私有方法或私有成员代码在IDE提示语法错误
-
-使用`@EnablePrivateAccessor`注解后访问私有方法或成员变量,虽然能正常通过编译,但在IDE上依然会提示语法错误。
-这个问题与使用`Lombok`工具库后使用生成的`getter`和`setter`会被IDE报语法错误一样,需要通过IDE插件来解决。
-当前`TestableMock`尚未提供相关插件。也可以改用`PrivateAccessor`工具类来访问私有成员,来避免IDE的异常信息。
-
-#### 2. 通过IDE运行单个测试用例时,Mock功能失效
-
-这是由于IDE运行单个测试用例时只会运行`maven-surefire-plugin`插件,跳过了`testable-maven-plugin`插件执行,导致Mock功能所需的JavaAgent没有随测试启动。
-
-解决方法有两种:
-
-**方法一**:在单元测试配置的"虚拟机参数(VM Option)"属性值末尾添加JavaAgent启动参数:`-javaagent:${HOME}/.m2/repository/com/alibaba/testable/testable-agent/0.3.0/testable-agent-0.3.0.jar`
-
-> PS:请将路径中的版本号替换成实际使用的版本号
-
-
-
-**方法二**:不使用`testable-maven-plugin`插件,直接配置JavaAgent参数到`maven-surefire-plugin`插件上。(`JMockit`也是使用了这种方法)配置方法为:
-
-> PS:请将路径中的版本号替换成实际使用的版本号
-
-```xml
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- -javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/0.2.2/testable-agent-0.2.2.jar
-
-
-```
-
-用这种方法需要注意,如果项目同时还使用了`Jacoco`的`on-the-fly`模式(默认模式)统计单元测试覆盖率,则需要在参数中再添加一个`@{argLine}`参数,完整配置如下:
-
-```xml
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- @{argLine} -javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/0.2.2/testable-agent-0.2.2.jar
-
-
-```
diff --git a/docs/zh-cn/doc/private-accessor.md b/docs/zh-cn/doc/private-accessor.md
index 3cec22e..d08eabe 100644
--- a/docs/zh-cn/doc/private-accessor.md
+++ b/docs/zh-cn/doc/private-accessor.md
@@ -10,6 +10,6 @@
访问和修改私有、常量成员时,IDE可能会提示语法有误,但编译器将能够正常运行测试。
-若不希望看到IDE的语法错误提醒,或是在基于JVM的非Java语言项目里(譬如Kotlin语言),也可以借助`PrivateAccessor`工具类来实现私有成员的访问。
+若不希望看到IDE的语法错误提醒,或是在非Java语言的JVM项目里(譬如Kotlin语言),也可以借助`PrivateAccessor`工具类来实现私有成员的访问。
效果见`java-demo`和`kotlin-demo`示例项目`DemoPrivateAccessTest`测试类中的用例。
diff --git a/docs/zh-cn/doc/release-note.md b/docs/zh-cn/doc/release-note.md
index 7116d0e..39291dd 100644
--- a/docs/zh-cn/doc/release-note.md
+++ b/docs/zh-cn/doc/release-note.md
@@ -2,6 +2,8 @@
## upcoming version
- support share mock method between test classes
+
+## 0.3.1
- support detail log of mocking process for diagnosis
## v0.3.0
diff --git a/docs/zh-cn/doc/troubleshooting.md b/docs/zh-cn/doc/troubleshooting.md
index 37d81b3..790e413 100644
--- a/docs/zh-cn/doc/troubleshooting.md
+++ b/docs/zh-cn/doc/troubleshooting.md
@@ -1,4 +1,40 @@
自助问题排查
---
-TBD
+相比Mockito等由开发者手工放置Mock类的做法,TestableMock使用方法名和参数类型匹配自动寻找需Mock的调用。这种机制在带来方便的同时也有可能发生预料之外的Mock替换。
+
+若要排查Mock相关的问题,只需在测试类上添加`@MockWith`注解,并配置参数`diagnose`值为`MockDiagnose.ENABLE`,在运行测试时就会打印出详细的Mock方法替换过程。
+
+```java
+@MockWith(diagnose = MockDiagnose.ENABLE)
+class DemoTest {
+ ...
+}
+```
+
+输出日志示例如下:
+
+```text
+[DIAGNOSE] Handling test class com/alibaba/testable/demo/DemoMockTest
+[DIAGNOSE] Handling source class com/alibaba/testable/demo/DemoMock
+[DIAGNOSE] Found 7 mock methods
+[DIAGNOSE] Handling method
+[DIAGNOSE] Handling method newFunc
+[DIAGNOSE] Line 14, mock method createBlackBox used
+[DIAGNOSE] Handling method outerFunc
+[DIAGNOSE] Line 22, mock method innerFunc used
+[DIAGNOSE] Handling method commonFunc
+[DIAGNOSE] Line 29, mock method trim used
+[DIAGNOSE] Line 29, mock method sub used
+[DIAGNOSE] Line 29, mock method startsWith used
+[DIAGNOSE] Handling method getBox
+[DIAGNOSE] Line 36, mock method secretBox used
+[DIAGNOSE] Handling method callerOne
+[DIAGNOSE] Line 43, mock method callFromDifferentMethod used
+[DIAGNOSE] Handling method callerTwo
+[DIAGNOSE] Line 47, mock method callFromDifferentMethod used
+[DIAGNOSE] Handling method innerFunc
+[DIAGNOSE] Handling method callFromDifferentMethod
+```
+
+该日志展示了被测类中所有发生了Mock替换的调用和相应代码行号。
diff --git a/docs/zh-cn/doc/usage.md b/docs/zh-cn/doc/usage.md
index e236684..3354c1c 100644
--- a/docs/zh-cn/doc/usage.md
+++ b/docs/zh-cn/doc/usage.md
@@ -8,38 +8,50 @@
## 在Maven项目中使用
-在`pom.xml`文件中添加`testable-processor`依赖:
+在项目`pom.xml`文件中,增加`testable-processor`依赖和`maven-surefire-plugin`配置,具体方法如下。
+
+建议先添加一个标识TestableMock版本的`property`,便于统一管理:
```xml
-
- com.alibaba.testable
- testable-processor
- ${testable.version}
- provided
-
+
+ 0.3.1
+
```
-以及`testable-maven-plugin`插件:
+在`dependencies`列表添加`testable-processor`依赖:
```xml
-
- com.alibaba.testable
- testable-maven-plugin
- ${testable.version}
-
-
- prepare
-
- prepare
-
-
-
-
+
+
+ com.alibaba.testable
+ testable-processor
+ ${testable.version}
+ provided
+
+
```
-> 其中`${testable.version}`需替换为具体版本号,当前最新版本为`0.3.0`
+最后在`build`区域的`plugins`列表里添加`maven-surefire-plugin`插件(如果已有此插件则只需添加``部分配置):
-若仅需使用单元测试随意访问被测类私有字段和方法的能力,不使用Mock功能,则`testable-maven-plugin`插件可以省略。
+```xml
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ -javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/${testable.version}/testable-agent-${testable.version}.jar
+
+
+
+
+```
+
+若项目同时还使用了`Jacoco`的`on-the-fly`模式(默认模式)统计单元测试覆盖率,则需在``配置中添加一个`@{argLine}`参数,添加后的配置如下:
+
+```xml
+@{argLine} -javaagent:${settings.localRepository}/com/alibaba/testable/testable-agent/${testable.version}/testable-agent-${testable.version}.jar
+```
## 在Gradle项目中使用
@@ -47,7 +59,7 @@
```groovy
dependencies {
- testCompile('com.alibaba.testable:testable-processor:0.3.0')
+ testCompile('com.alibaba.testable:testable-processor:0.3.1')
}
```
diff --git a/docs/zh-cn/doc/use-maven-plugin.md b/docs/zh-cn/doc/use-maven-plugin.md
new file mode 100644
index 0000000..2ce461b
--- /dev/null
+++ b/docs/zh-cn/doc/use-maven-plugin.md
@@ -0,0 +1,34 @@
+使用Testable Maven插件
+---
+
+在使用Maven构建的项目里,除了直接修改`maven-surefire-plugin`插件的运行参数,也可通过`testable-maven-plugin`插件获得相同效果:
+
+```xml
+
+ com.alibaba.testable
+ testable-maven-plugin
+ ${testable.version}
+
+
+ prepare
+
+ prepare
+
+
+
+
+```
+
+> 当使用`testable-maven-plugin`插件时,应该移除`maven-surefire-plugin`插件上的TestableMock相关配置
+
+相比而言,`testable-maven-plugin`插件能够与Jacoco插件直接同时使用,无需额外适配。但当通过IDE运行单个测试用例时,Mock功能会失效。
+
+这是由于IDE运行单个测试用例时只会运行`maven-surefire-plugin`插件,跳过了`testable-maven-plugin`插件执行,导致Mock功能所需的JavaAgent没有随测试启动。
+
+这个问题可以通过配置IDE的测试参数绕过。以IntelliJ为例,在单元测试配置的"虚拟机参数(VM Option)"属性值末尾添加JavaAgent启动参数:`-javaagent:${HOME}/.m2/repository/com/alibaba/testable/testable-agent/x.y.z/testable-agent-x.y.z.jar`
+
+> PS:请将路径中的`x.y.z`替换成实际使用的版本号
+
+
+
+由于需要在每个单测任务上分别配置,这种方法实际使用起来比较麻烦,因此目前依然优先推荐修改`maven-surefire-plugin`插件配置的方案。
diff --git a/docs/zh-cn/sidebar.md b/docs/zh-cn/sidebar.md
index ef5a8b1..80fda66 100644
--- a/docs/zh-cn/sidebar.md
+++ b/docs/zh-cn/sidebar.md
@@ -3,9 +3,9 @@
- [直接访问私有成员](zh-cn/doc/private-accessor.md)
- [快速Mock任意方法](zh-cn/doc/use-mock.md)
- [校验Mock调用](zh-cn/doc/matcher.md)
+ - [常见使用问题](zh-cn/doc/frequency-asked-questions.md)
- [自助问题排查](zh-cn/doc/troubleshooting.md)
- 其他文档
- - [常见问题](zh-cn/doc/frequency-asked-questions.md)
- - [已知缺陷](zh-cn/doc/known-issues.md)
+ - [Testable Maven插件](zh-cn/doc/use-maven-plugin.md)
- [Release Note](zh-cn/doc/release-note.md)
diff --git a/pom.xml b/pom.xml
index fc1a7e8..f5f7ae3 100755
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.alibaba.testable
- parent
+ testable-parent
1.0.0-SNAPSHOT
pom
diff --git a/testable-agent/pom.xml b/testable-agent/pom.xml
index 3515566..0bce414 100755
--- a/testable-agent/pom.xml
+++ b/testable-agent/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.alibaba.testable
testable-agent
- 0.3.1-SNAPSHOT
+ 0.3.1
jar
testable-agent
Unit test enhancement toolkit
@@ -35,7 +35,7 @@
UTF-8
8.0.1
5.6.2
- 0.3.1-SNAPSHOT
+ 0.3.1
3.8.1
3.0.0-M5
3.2.0
diff --git a/testable-agent/src/main/java/com/alibaba/testable/agent/util/LogUtil.java b/testable-agent/src/main/java/com/alibaba/testable/agent/util/LogUtil.java
index dfe64d3..3f304ff 100644
--- a/testable-agent/src/main/java/com/alibaba/testable/agent/util/LogUtil.java
+++ b/testable-agent/src/main/java/com/alibaba/testable/agent/util/LogUtil.java
@@ -7,20 +7,20 @@ public class LogUtil {
private static final int LEVEL_ERROR = 0;
private static final int LEVEL_WARN = 1;
- private static final int LEVEL_DEBUG = 2;
+ private static final int LEVEL_DIAGNOSE = 2;
private static final ThreadLocal LEVEL = new ThreadLocal();
public static boolean globalDebugEnable = false;
public static void debug(String msg, Object... args) {
- if (LEVEL.get() >= LEVEL_DEBUG) {
- System.err.println(String.format("[DEBUG] " + msg, args));
+ if (LEVEL.get() >= LEVEL_DIAGNOSE) {
+ System.out.println(String.format("[DIAGNOSE] " + msg, args));
}
}
public static void enableDebugLog() {
LEVEL.remove();
- LEVEL.set(LEVEL_DEBUG);
+ LEVEL.set(LEVEL_DIAGNOSE);
}
public static void disableDebugLog() {
@@ -29,7 +29,7 @@ public class LogUtil {
}
public static void resetDebugLog() {
- LEVEL.set(globalDebugEnable ? LEVEL_DEBUG : LEVEL_WARN);
+ LEVEL.set(globalDebugEnable ? LEVEL_DIAGNOSE : LEVEL_WARN);
}
}
diff --git a/testable-core/pom.xml b/testable-core/pom.xml
index 9cf7004..68c3dbb 100644
--- a/testable-core/pom.xml
+++ b/testable-core/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.alibaba.testable
testable-core
- 0.3.1-SNAPSHOT
+ 0.3.1
jar
testable-core
Unit test enhancement toolkit
diff --git a/testable-maven-plugin/pom.xml b/testable-maven-plugin/pom.xml
index 50b886f..e7a7da9 100644
--- a/testable-maven-plugin/pom.xml
+++ b/testable-maven-plugin/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.alibaba.testable
testable-maven-plugin
- 0.3.1-SNAPSHOT
+ 0.3.1
maven-plugin
testable-maven-plugin
Unit test enhancement toolkit
@@ -30,7 +30,7 @@
- 0.3.1-SNAPSHOT
+ 0.3.1
1.6
1.6
UTF-8
diff --git a/testable-processor/pom.xml b/testable-processor/pom.xml
index 4dce6fb..b377753 100644
--- a/testable-processor/pom.xml
+++ b/testable-processor/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.alibaba.testable
testable-processor
- 0.3.1-SNAPSHOT
+ 0.3.1
jar
testable-processor
Unit test enhancement toolkit
@@ -34,7 +34,7 @@
1.6
UTF-8
5.6.2
- 0.3.1-SNAPSHOT
+ 0.3.1
3.8.1
3.0.0-M5
3.2.0