added notification of recent frequent questions

This commit is contained in:
金戟 2020-12-29 13:18:06 +08:00
parent 3df95db607
commit 2efee1feb2
2 changed files with 24 additions and 0 deletions

View File

@ -9,6 +9,10 @@
阅读[这里](https://mp.weixin.qq.com/s/KyU6Eu7mDkZU8FspfSqfMw)了解更多故事。
> 特别说明
> 1. 如有遇到启动报空指针异常问题,请将`TestableMock`升级到`0.4.5`或以上版本
> 2. 如遇到"Attempt to access none-static member in mock method"错误,参见[常见问题](https://alibaba.github.io/testable-mock/#/zh-cn/doc/frequently-asked-questions)第8条
## 目录结构
```bash

View File

@ -46,3 +46,23 @@ Kotlin语言中的`String`类型实际上是`kotlin.String`,而非`java.lang.S
结合[Roboelectric](https://github.com/robolectric/robolectric)测试框架可使用。
Android系统的`Dalvik`和`ART`虚拟机采用了与标准JVM不同的字节码体系会影响`TestableMock`的正常工作。`Roboelectric`框架能在普通JVM虚拟机上运行Android单元测试其速度比通过Android虚拟机运行单元测试快非常多绝大多数Android App的单元测试都在使用`Roboelectric`框架。
#### 8. 使用Mock时候遇到"Attempt to access none-static member in mock method"错误?
当前`TestableMock`的设计不允许在Mock方法中访问测试类的非`static`成员因为Mock方法自身会在运行期被动态修改为`static`类型。然而有些Java语句包括构造块譬如`new ArrayList<String>() {{ append("data"); }}`)、匿名函数(譬如`list.stream().map(i -> i.get)`等等会在编译过程中生成额外的成员方法调用导致Mock方法执行报错。
最简单的解决办法是将Mock方法本身也声明为`static`类型(这样动态生成的调用也会是`static`的,避免了以上错误),例如原方法定义为:
```java
@MockMethod
private int getXxx(Demo self) {}
```
将其修改为:
```java
@MockMethod
private static int getXxx(Demo self) {}
```
在下一个大迭代版本(即`0.5`版本将会在保持当前Mock体验的前提下对Mock的实现机制进行修改不再需要修改Mock方法为静态方法从而彻底解决此类报错问题。