mirror of
https://github.com/alibaba/testable-mock.git
synced 2025-01-11 04:40:12 +08:00
3.5 KiB
3.5 KiB
校验Mock调用
在测试中,除了需要将某些含有外部依赖的方法替换为Mock,经常还会需要验证该方法被调用时的参数是否符合预期。
在TestableMock
中提供了校验器(verifier)和匹配器(matcher)来实现这一功能。譬如:
@Test
public test_case() {
int res = insToTest.methodToTest();
verify("mockMethod").with(123, "abc");
}
这个用例会检查在执行被测方法methodToTest()
时,名称是mockMethod
的Mock方法是否有被调用过,且调用时收到的参数值是否为123
和"abc"
(假设被Mock的mockMethod
方法有两个参数)。
除了这种简单校验以外,TestableMock
当前已经支持了多种校验器,以及能够模糊匹配参数特征的匹配器。
在示例项目java-demo
和kotlin-demo
中的DemoMatcherTest
测试类详细展示了这些校验器和匹配器的用法。
基本校验器
with(Object... args)
→ 验证方法是否被指定参数调用过withInOrder(Object... args)
→ 如果指定方法被调用了多次,依据实际调用顺序依次匹配withTimes(int expectedCount)
→ 验证方法是否被调用过指定次数,忽略对调用参数的检查without(Object... args)
→ 验证方法从未被使用指定参数调用过times(int count)
→ 连在with()
或withInOrder()
方法之后使用,验证该方法被同样条件的参数调用过了指定次数
基本匹配器
any()
→ 匹配任何值,包括Nullany(Class<?> clazz)
→ 匹配任何指定类型或子类型的值anyTypeOf(Class<?>... classes)
→ 匹配在列表中的任意一种类型的值anyString()
→ 匹配任何字符串anyNumber()
→ 匹配任何数值(整数或浮点数)anyBoolean()
→ 匹配任何布尔值anyByte()
→ 匹配任何单字节类型的值anyChar()
→ 匹配任何单字符类型的值anyInt()
→ 匹配任何整数类型的值anyLong()
→ 匹配任何长整数类型的值anyFloat()
→ 匹配任何浮点数类型的值anyDouble()
→ 匹配任何双精度浮点数类型的值anyShort()
→ 匹配任何短整数类型的值anyArray()
→ 匹配任何数组anyArrayOf(Class<?> clazz)
→ 匹配任何指定类型的数组anyList()
→ 匹配任何列表anyListOf(Class<?> clazz)
→ 匹配任何指定类型的列表anySet()
→ 匹配任何集合anySetOf(Class<?> clazz)
→ 匹配任何指定类型的集合anyMap()
→ 匹配任何映射anyMapOf(Class<?> keyClass, Class<?> valueClass)
→ 匹配任何指定类型的映射anyCollection()
→ 匹配任何容器anyCollectionOf(Class<?> clazz)
→ 匹配任何指定类型的容器anyIterable()
→ 匹配任何迭代器anyIterableOf(Class<?> clazz)
→ 匹配任何指定类型的迭代器eq(Object obj)
→ 匹配与指定值相等的对象refEq(Object obj)
→ 匹配指定对象(非值相等,而是就是同一个对象)
空值匹配器
isNull()
→ 匹配NullnotNull()
→ 匹配除Null以外的任何值nullable(Class<?> clazz)
→ 匹配空或指定类型的任何值
字符串匹配器
contains(String substring)
→ 匹配包含特定子串的字符串matches(String regex)
→ 匹配符合指定正则表达式的字符串endsWith(String suffix)
→ 匹配以指定子串结尾的字符串startsWith(String prefix)
→ 匹配以指定子串开头的字符串
万能匹配器
any(MatchFunction matcher)
→ 匹配符合指定表达式的值