mirror of
https://github.com/alibaba/testable-mock.git
synced 2026-08-22 19:23:29 +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)→ 匹配符合指定表达式的值