From 30570ae69dcbfd1851d81ee2c934614762e45e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Wed, 17 May 2023 18:04:14 +0800 Subject: [PATCH] fix: verifier should compare arrays in deep --- .../core/matcher/InvocationVerifier.java | 11 +++-- .../core/matcher/InvocationVerifierTest.java | 47 +++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 testable-core/src/test/java/com/alibaba/testable/core/matcher/InvocationVerifierTest.java diff --git a/testable-core/src/main/java/com/alibaba/testable/core/matcher/InvocationVerifier.java b/testable-core/src/main/java/com/alibaba/testable/core/matcher/InvocationVerifier.java index ed6a61f..9763ced 100644 --- a/testable-core/src/main/java/com/alibaba/testable/core/matcher/InvocationVerifier.java +++ b/testable-core/src/main/java/com/alibaba/testable/core/matcher/InvocationVerifier.java @@ -6,6 +6,7 @@ import com.alibaba.testable.core.util.MockContextUtil; import com.alibaba.testable.core.util.TestableUtil; import java.security.InvalidParameterException; +import java.util.Arrays; import java.util.List; /** @@ -145,9 +146,13 @@ public class InvocationVerifier { } private boolean matches(Object expectValue, Object realValue) { - return expectValue instanceof InvocationMatcher ? - ((InvocationMatcher) expectValue).matchFunction.check(realValue) : - expectValue.equals(realValue); + if (expectValue instanceof InvocationMatcher) { + return ((InvocationMatcher) expectValue).matchFunction.check(realValue); + } else if (expectValue.getClass().isArray() && realValue.getClass().isArray()) { + return Arrays.deepEquals((Object[])expectValue, (Object[])realValue); + } else { + return expectValue.equals(realValue); + } } private String desc(Object[] args) { diff --git a/testable-core/src/test/java/com/alibaba/testable/core/matcher/InvocationVerifierTest.java b/testable-core/src/test/java/com/alibaba/testable/core/matcher/InvocationVerifierTest.java new file mode 100644 index 0000000..82b1c84 --- /dev/null +++ b/testable-core/src/test/java/com/alibaba/testable/core/matcher/InvocationVerifierTest.java @@ -0,0 +1,47 @@ +package com.alibaba.testable.core.matcher; + +import com.alibaba.testable.core.tool.OmniConstructor; +import com.alibaba.testable.core.tool.PrivateAccessor; +import org.junit.jupiter.api.Test; + +import static com.alibaba.testable.core.tool.CollectionTool.listOf; +import static org.junit.jupiter.api.Assertions.*; + +class InvocationVerifierTest { + + private InvocationVerifier invocationVerifier = OmniConstructor.newInstance(InvocationVerifier.class); + + @Test + void should_matches_object() { + assertTrue((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", "abc", "abc")); + assertTrue((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", 1L, 1L)); + + assertFalse((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", "xyz", "abc")); + assertFalse((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", 1L, "abc")); + assertFalse((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", 1L, 1)); + } + + @Test + void should_matches_array() { + assertTrue((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", + new String[] {"abc", "xyz"}, new String[] {"abc", "xyz"})); + + assertFalse((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", + new String[] {"abc", "xyz"}, new String[] {"xyz", "abc"})); + assertFalse((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", + new String[] {"abc", "xyz"}, new String[] {"xyz"})); + } + + @Test + void should_matches_matcher() { + assertTrue((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", + InvocationMatcher.anyArray(), new String[] {"abc", "xyz"})); + assertTrue((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", + InvocationMatcher.anyString(), "abc")); + + assertFalse((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", + InvocationMatcher.anyString(), new String[] {"abc", "xyz"})); + assertFalse((Boolean)PrivateAccessor.invoke(invocationVerifier, "matches", + InvocationMatcher.anyArray(), "abc")); + } +} \ No newline at end of file