mirror of
https://github.com/alibaba/testable-mock.git
synced 2025-01-26 20:30:29 +08:00
3.6 KiB
3.6 KiB
版本升级说明
升级到0.7.x版本
在0.7
版本重命名了Mock相关的注解和方法,以避免命名冲突和由于名字带来的理解歧义,包括两部分变化。
- 用于验证Mock方法调用的
verify()
方法与包括com.sun
包在内的多个JVM内置静态方法重名,在IDE自动添加import
时会有误选的情况,该方法在新版本中更名为verifyInvoked()
,同时所属的类型更名为InvocationVerifier
。 - 注解
@MockMethod
和@MockConstructor
的实际作用是对方法调用和New操作进行Mock,而其名称容易使人误解为是对方法和构造器本身进行了Mock,在新版本中这两个注解分别已被分别更名为@MockInvoke
和@MockNew
。
这些注解和方法的使用与之前版本并无差异,从0.6.x
版本升级到0.7.0
及以上版本时,请全局替换相关名称即可。
升级到0.6.x版本
在0.6
版本中,TestableMock
提供了快速构造复杂参数对象的能力,同时包含一处与0.5
版本不兼容的修改,PrivateAccessor
类型的包路径从com.alibaba.testable.core.accessor
移到了com.alibaba.testable.core.tool
。
例如在此前的测试代码中若使用了如下类型引用语句:
import com.alibaba.testable.core.accessor.PrivateAccessor;
当升级TestableMock
为0.6
版本时,请将其修改为:
import com.alibaba.testable.core.tool.PrivateAccessor;
升级到0.5.x版本
在0.5
版本中,TestableMock
解决了此前遗留的三大历史问题:
Mock方法无法调用其他非静态方法。新版中的Mock方法与普通方法不再有任何差别,可以访问任意外部方法和成员变量。Mock方法总是作用于整个测试生命周期。从现在开始,Mock方法支持将生效范围限定为所属测试类里的测试用例,不用担心跨类测试调用被意外Mock掉了。需手工清理MOCK_CONTEXT且只支持类粒度的并行测试。现在每个测试用例拥有了独立的MOCK_CONTEXT
变量,无需清理也不会串号,而且可以放心使用任意粒度的并行单元测试啦。
在使用方式上,0.5
版本延续了简洁轻量原则,同时为了更好的实现Mock方法复用,新版本的Mock类与测试类之间有了明确的边界。从0.4
版本升级到0.5
时,唯一需要的改变是将测试类中的所有Mock方法使用一个public static class Mock { }
包裹起来。
例如,原先有如下测试类定义:
public class DemoMockTest {
@MockMethod(targetClass = DemoMock.class)
private String innerFunc(String text) {
return "hello_" + text;
}
@Test
void should_mock_member_method() throws Exception {
assertEquals("hello_world", demoMock.outerFunc());
verifyInvoked("innerFunc").with("world");
}
}
升级为0.5
版本后,将所有Mock方法(此例中只有innerFunc
这一个方法)移到一个名称为Mock
的静态内部类中,相当于增加两行代码:
public class DemoMockTest {
public static class Mock { // 增加此行
@MockMethod(targetClass = DemoMock.class)
private String innerFunc(String text) {
return "hello_" + text;
}
} // 增加此行
@Test
void should_mock_member_method() throws Exception {
assertEquals("hello_world", demoMock.outerFunc());
verifyInvoked("innerFunc").with("world");
}
}
然后将pom.xml
或build.gradle
文件中的TestableMock
依赖升级到对应的新版本即可。