diff --git a/demo/java-demo/pom.xml b/demo/java-demo/pom.xml index 845e800..fbec31f 100644 --- a/demo/java-demo/pom.xml +++ b/demo/java-demo/pom.xml @@ -1,60 +1,41 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.3.4.RELEASE - - - com.alibaba.testable - java-demo - 1.0.0-SNAPSHOT - java-demo - Demo project for Spring Boot + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.alibaba.testable + java-demo + 1.0.0-SNAPSHOT + java-demo + Demo project for TestableMock - - 1.8 - 0.3.1-SNAPSHOT - + + 1.8 + 1.8 + 0.3.1-SNAPSHOT + - - - org.springframework.boot - spring-boot-starter-web - + + + com.alibaba.testable + testable-processor + ${testable.version} + provided + + + org.junit.jupiter + junit-jupiter-api + 5.6.2 + test + + - - com.alibaba.testable - testable-processor - ${testable.version} - provided - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.vintage - junit-vintage-engine - - - org.ow2.asm - asm - - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + @@ -62,44 +43,44 @@ - - com.alibaba.testable - testable-maven-plugin - ${testable.version} - - - prepare - - prepare - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.6 - - - prepare-agent - - prepare-agent - - - - report - prepare-package - - report - - - target/jacoco.exec - target/jacoco-ut - - - - - - + + com.alibaba.testable + testable-maven-plugin + ${testable.version} + + + prepare + + prepare + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.6 + + + prepare-agent + + prepare-agent + + + + report + prepare-package + + report + + + target/jacoco.exec + target/jacoco-ut + + + + + + diff --git a/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoApplication.java b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoApplication.java deleted file mode 100644 index 993f22d..0000000 --- a/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoApplication.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.alibaba.testable.demo; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class DemoApplication { - - public static void main(String[] args) { - SpringApplication.run(DemoApplication.class, args); - } -} diff --git a/demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoInheritService.java b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoInherit.java similarity index 90% rename from demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoInheritService.java rename to demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoInherit.java index fdcb246..2ee375f 100644 --- a/demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoInheritService.java +++ b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoInherit.java @@ -1,12 +1,13 @@ -package com.alibaba.testable.demo.service; +package com.alibaba.testable.demo; import com.alibaba.testable.demo.model.BlackBox; import com.alibaba.testable.demo.model.Box; import com.alibaba.testable.demo.model.Color; -import org.springframework.stereotype.Service; -@Service -public class DemoInheritService { +/** + * @author flin + */ +public class DemoInherit { /** * call method overridden by sub class via parent class variable diff --git a/demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoMatcherService.java b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoMatcher.java similarity index 93% rename from demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoMatcherService.java rename to demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoMatcher.java index b36ae4c..2d6419f 100644 --- a/demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoMatcherService.java +++ b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoMatcher.java @@ -1,8 +1,7 @@ -package com.alibaba.testable.demo.service; +package com.alibaba.testable.demo; import com.alibaba.testable.demo.model.BlackBox; -import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; @@ -12,8 +11,7 @@ import java.util.List; /** * @author flin */ -@Service -public class DemoMatcherService { +public class DemoMatcher { /** * Method to be mocked diff --git a/demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoMockService.java b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoMock.java similarity index 87% rename from demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoMockService.java rename to demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoMock.java index d7468ee..edbb746 100644 --- a/demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoMockService.java +++ b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoMock.java @@ -1,14 +1,11 @@ -package com.alibaba.testable.demo.service; +package com.alibaba.testable.demo; import com.alibaba.testable.demo.model.BlackBox; -import com.alibaba.testable.demo.model.Box; -import org.springframework.stereotype.Service; import sun.net.www.http.HttpClient; import java.net.URL; -@Service -public class DemoMockService { +public class DemoMock { /** * method with new operation diff --git a/demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoPrivateAccessService.java b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoPrivateAccess.java similarity index 71% rename from demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoPrivateAccessService.java rename to demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoPrivateAccess.java index 336db49..c5f20a1 100644 --- a/demo/java-demo/src/main/java/com/alibaba/testable/demo/service/DemoPrivateAccessService.java +++ b/demo/java-demo/src/main/java/com/alibaba/testable/demo/DemoPrivateAccess.java @@ -1,9 +1,9 @@ -package com.alibaba.testable.demo.service; +package com.alibaba.testable.demo; -import org.springframework.stereotype.Service; - -@Service -public class DemoPrivateAccessService { +/** + * @author flin + */ +public class DemoPrivateAccess { private int count; diff --git a/demo/java-demo/src/main/resources/application.properties b/demo/java-demo/src/main/resources/application.properties deleted file mode 100644 index 8b13789..0000000 --- a/demo/java-demo/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ - diff --git a/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoApplicationTests.java b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoApplicationTests.java deleted file mode 100644 index 763c918..0000000 --- a/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.alibaba.testable.demo; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class DemoApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoInheritServiceTest.java b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoInheritTest.java similarity index 83% rename from demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoInheritServiceTest.java rename to demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoInheritTest.java index 6f56b56..873e5b8 100644 --- a/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoInheritServiceTest.java +++ b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoInheritTest.java @@ -1,4 +1,4 @@ -package com.alibaba.testable.demo.service; +package com.alibaba.testable.demo; import com.alibaba.testable.core.annotation.TestableMock; import com.alibaba.testable.demo.model.BlackBox; @@ -9,7 +9,7 @@ import org.junit.jupiter.api.Test; import static com.alibaba.testable.core.matcher.InvokeVerifier.verify; import static org.junit.jupiter.api.Assertions.*; -class DemoInheritServiceTest { +class DemoInheritTest { @TestableMock(targetMethod = "put") private void put_into_box(Box self, String something) { @@ -41,46 +41,46 @@ class DemoInheritServiceTest { return "color_from_blackbox"; } - private DemoInheritService inheritService = new DemoInheritService(); + private DemoInherit demoInherit = new DemoInherit(); @Test void should_able_to_mock_call_sub_object_method_by_parent_object() throws Exception { - BlackBox box = (BlackBox)inheritService.putIntoBox(); + BlackBox box = (BlackBox)demoInherit.putIntoBox(); verify("put_into_box").withTimes(1); assertEquals("put_data_into_box", box.get()); } @Test void should_able_to_mock_call_sub_object_method_by_sub_object() throws Exception { - BlackBox box = inheritService.putIntoBlackBox(); + BlackBox box = demoInherit.putIntoBlackBox(); verify("put_into_blackbox").withTimes(1); assertEquals("put_data_into_blackbox", box.get()); } @Test void should_able_to_mock_call_parent_object_method_by_parent_object() throws Exception { - String content = inheritService.getFromBox(); + String content = demoInherit.getFromBox(); verify("get_from_box").withTimes(1); assertEquals("get_from_box", content); } @Test void should_able_to_mock_call_parent_object_method_by_sub_object() throws Exception { - String content = inheritService.getFromBlackBox(); + String content = demoInherit.getFromBlackBox(); verify("get_from_blackbox").withTimes(1); assertEquals("get_from_blackbox", content); } @Test void should_able_to_mock_call_interface_method_by_interface_object() throws Exception { - String color = inheritService.getColorViaColor(); + String color = demoInherit.getColorViaColor(); verify("get_color_from_color").withTimes(1); assertEquals("color_from_color", color); } @Test void should_able_to_mock_call_interface_method_by_sub_class_object() throws Exception { - String color = inheritService.getColorViaBox(); + String color = demoInherit.getColorViaBox(); verify("get_color_from_blackbox").withTimes(1); assertEquals("color_from_blackbox", color); } diff --git a/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoMatcherServiceTest.java b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoMatcherTest.java similarity index 77% rename from demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoMatcherServiceTest.java rename to demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoMatcherTest.java index 021732e..b115e83 100644 --- a/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoMatcherServiceTest.java +++ b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoMatcherTest.java @@ -1,4 +1,4 @@ -package com.alibaba.testable.demo.service; +package com.alibaba.testable.demo; import com.alibaba.testable.core.annotation.TestableMock; import com.alibaba.testable.core.error.VerifyFailedError; @@ -9,30 +9,30 @@ import static com.alibaba.testable.core.matcher.InvokeMatcher.*; import static com.alibaba.testable.core.matcher.InvokeVerifier.verify; import static org.junit.jupiter.api.Assertions.fail; -class DemoMatcherServiceTest { +class DemoMatcherTest { - private DemoMatcherService demo = new DemoMatcherService(); + private DemoMatcher demoMatcher = new DemoMatcher(); @TestableMock(targetMethod = "methodToBeMocked") - private void methodWithoutArgument(DemoMatcherService self) {} + private void methodWithoutArgument(DemoMatcher self) {} @TestableMock(targetMethod = "methodToBeMocked") - private void methodWithArguments(DemoMatcherService self, Object a1, Object a2) {} + private void methodWithArguments(DemoMatcher self, Object a1, Object a2) {} @TestableMock(targetMethod = "methodToBeMocked") - private void methodWithArrayArgument(DemoMatcherService self, Object[] a) {} + private void methodWithArrayArgument(DemoMatcher self, Object[] a) {} @Test void should_match_no_argument() { - demo.callMethodWithoutArgument(); + demoMatcher.callMethodWithoutArgument(); verify("methodWithoutArgument").withTimes(1); - demo.callMethodWithoutArgument(); + demoMatcher.callMethodWithoutArgument(); verify("methodWithoutArgument").withTimes(2); } @Test void should_match_number_arguments() { - demo.callMethodWithNumberArguments(); + demoMatcher.callMethodWithNumberArguments(); verify("methodWithArguments").without(anyString(), 2); verify("methodWithArguments").withInOrder(anyInt(), 2); verify("methodWithArguments").withInOrder(anyLong(), anyNumber()); @@ -45,7 +45,7 @@ class DemoMatcherServiceTest { @Test void should_match_string_arguments() { - demo.callMethodWithStringArgument(); + demoMatcher.callMethodWithStringArgument(); verify("methodWithArguments").with(startsWith("he"), endsWith("ld")); verify("methodWithArguments").with(contains("stab"), matches("m.[cd]k")); verify("methodWithArrayArgument").with(anyArrayOf(String.class)); @@ -53,7 +53,7 @@ class DemoMatcherServiceTest { @Test void should_match_object_arguments() { - demo.callMethodWithObjectArgument(); + demoMatcher.callMethodWithObjectArgument(); verify("methodWithArguments").withInOrder(any(BlackBox.class), any(BlackBox.class)); verify("methodWithArguments").withInOrder(nullable(BlackBox.class), nullable(BlackBox.class)); verify("methodWithArguments").withInOrder(isNull(), notNull()); @@ -61,10 +61,10 @@ class DemoMatcherServiceTest { @Test void should_match_with_times() { - demo.callMethodWithNumberArguments(); + demoMatcher.callMethodWithNumberArguments(); verify("methodWithArguments").with(anyNumber(), any()).times(3); - demo.callMethodWithNumberArguments(); + demoMatcher.callMethodWithNumberArguments(); boolean gotError = false; try { verify("methodWithArguments").with(anyNumber(), any()).times(4); diff --git a/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoMockServiceTest.java b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoMockTest.java similarity index 74% rename from demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoMockServiceTest.java rename to demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoMockTest.java index 7590ebd..9afe377 100644 --- a/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoMockServiceTest.java +++ b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoMockTest.java @@ -1,4 +1,4 @@ -package com.alibaba.testable.demo.service; +package com.alibaba.testable.demo; import com.alibaba.testable.core.annotation.TestableMock; import com.alibaba.testable.demo.model.BlackBox; @@ -10,7 +10,7 @@ import static com.alibaba.testable.core.matcher.InvokeVerifier.verify; import static com.alibaba.testable.core.tool.TestableTool.*; import static org.junit.jupiter.api.Assertions.assertEquals; -class DemoMockServiceTest { +class DemoMockTest { @TestableMock(targetMethod = CONSTRUCTOR) private BlackBox createBlackBox(String text) { @@ -18,7 +18,7 @@ class DemoMockServiceTest { } @TestableMock - private String innerFunc(DemoMockService self, String text) { + private String innerFunc(DemoMock self, String text) { return "mock_" + text; } @@ -43,7 +43,7 @@ class DemoMockServiceTest { } @TestableMock - private String callFromDifferentMethod(DemoMockService self) { + private String callFromDifferentMethod(DemoMock self) { if (TEST_CASE.equals("should_able_to_get_test_case_name")) { return "mock_special"; } @@ -53,23 +53,23 @@ class DemoMockServiceTest { } } - private DemoMockService demoService = new DemoMockService(); + private DemoMock demoMock = new DemoMock(); @Test void should_able_to_mock_new_object() throws Exception { - assertEquals("mock_something", demoService.newFunc()); + assertEquals("mock_something", demoMock.newFunc()); verify("createBlackBox").with("something"); } @Test void should_able_to_mock_member_method() throws Exception { - assertEquals("{ \"res\": \"mock_hello\"}", demoService.outerFunc("hello")); + assertEquals("{ \"res\": \"mock_hello\"}", demoMock.outerFunc("hello")); verify("innerFunc").with("hello"); } @Test void should_able_to_mock_common_method() throws Exception { - assertEquals("trim_string__sub_string__false", demoService.commonFunc()); + assertEquals("trim_string__sub_string__false", demoMock.commonFunc()); verify("trim").withTimes(1); verify("sub").withTimes(1); verify("startsWith").withTimes(1); @@ -77,26 +77,26 @@ class DemoMockServiceTest { @Test void should_able_to_mock_static_method() throws Exception { - assertEquals("not_secret_box", demoService.getBox().get()); + assertEquals("not_secret_box", demoMock.getBox().get()); verify("secretBox").withTimes(1); } @Test void should_able_to_get_source_method_name() throws Exception { // synchronous - assertEquals("mock_one_mock_others", demoService.callerOne() + "_" + demoService.callerTwo()); + assertEquals("mock_one_mock_others", demoMock.callerOne() + "_" + demoMock.callerTwo()); // asynchronous assertEquals("mock_one_mock_others", - Executors.newSingleThreadExecutor().submit(() -> demoService.callerOne() + "_" + demoService.callerTwo()).get()); + Executors.newSingleThreadExecutor().submit(() -> demoMock.callerOne() + "_" + demoMock.callerTwo()).get()); verify("callFromDifferentMethod").withTimes(4); } @Test void should_able_to_get_test_case_name() throws Exception { // synchronous - assertEquals("mock_special", demoService.callerOne()); + assertEquals("mock_special", demoMock.callerOne()); // asynchronous - assertEquals("mock_special", Executors.newSingleThreadExecutor().submit(() -> demoService.callerOne()).get()); + assertEquals("mock_special", Executors.newSingleThreadExecutor().submit(() -> demoMock.callerOne()).get()); verify("callFromDifferentMethod").withTimes(2); } diff --git a/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoPrivateAccessTest.java b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoPrivateAccessTest.java new file mode 100644 index 0000000..7a616be --- /dev/null +++ b/demo/java-demo/src/test/java/com/alibaba/testable/demo/DemoPrivateAccessTest.java @@ -0,0 +1,37 @@ +package com.alibaba.testable.demo; + +import com.alibaba.testable.core.accessor.PrivateAccessor; +import com.alibaba.testable.processor.annotation.EnablePrivateAccess; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@EnablePrivateAccess +class DemoPrivateAccessTest { + + private DemoPrivateAccess demoPrivateAccess = new DemoPrivateAccess(); + + @Test + void should_able_to_access_private_method() throws Exception { + assertEquals("hello - 1", demoPrivateAccess.privateFunc("hello", 1)); + assertEquals("hello - 1", PrivateAccessor.invoke(demoPrivateAccess, "privateFunc", "hello", 1)); + } + + @Test + void should_able_to_access_private_field() throws Exception { + demoPrivateAccess.count = 2; + assertEquals("4", demoPrivateAccess.privateFieldAccessFunc()); + assertEquals(new Integer(4), demoPrivateAccess.count); + + PrivateAccessor.set(demoPrivateAccess, "count", 3); + assertEquals("5", demoPrivateAccess.privateFieldAccessFunc()); + assertEquals(new Integer(5), PrivateAccessor.get(demoPrivateAccess, "count")); + } + + @Test + void should_able_to_update_final_field() throws Exception { + demoPrivateAccess.pi = 4.13; + assertEquals(4.13, demoPrivateAccess.pi); + } + +} diff --git a/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoPrivateAccessServiceTest.java b/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoPrivateAccessServiceTest.java deleted file mode 100644 index ae75d52..0000000 --- a/demo/java-demo/src/test/java/com/alibaba/testable/demo/service/DemoPrivateAccessServiceTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.alibaba.testable.demo.service; - -import com.alibaba.testable.core.accessor.PrivateAccessor; -import com.alibaba.testable.processor.annotation.EnablePrivateAccess; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@EnablePrivateAccess -class DemoPrivateAccessServiceTest { - - private DemoPrivateAccessService demoService = new DemoPrivateAccessService(); - - @Test - void should_able_to_access_private_method() throws Exception { - assertEquals("hello - 1", demoService.privateFunc("hello", 1)); - assertEquals("hello - 1", PrivateAccessor.invoke(demoService, "privateFunc", "hello", 1)); - } - - @Test - void should_able_to_access_private_field() throws Exception { - demoService.count = 2; - assertEquals("4", demoService.privateFieldAccessFunc()); - assertEquals(new Integer(4), demoService.count); - - PrivateAccessor.set(demoService, "count", 3); - assertEquals("5", demoService.privateFieldAccessFunc()); - assertEquals(new Integer(5), PrivateAccessor.get(demoService, "count")); - } - - @Test - void should_able_to_update_final_field() throws Exception { - demoService.pi = 4.13; - assertEquals(4.13, demoService.pi); - } - -} diff --git a/demo/kotlin-demo/pom.xml b/demo/kotlin-demo/pom.xml index 667fab7..e8ff31d 100644 --- a/demo/kotlin-demo/pom.xml +++ b/demo/kotlin-demo/pom.xml @@ -2,40 +2,30 @@ 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.3.4.RELEASE - - com.alibaba.testable kotlin-demo - 0.0.1-SNAPSHOT + 1.0.0-SNAPSHOT kotlin-demo - Demo project for Spring Boot + Demo project for TestableMock 1.8 1.3.72 + 1.8 + 1.8 0.3.1-SNAPSHOT - - org.springframework.boot - spring-boot-starter - org.jetbrains.kotlin kotlin-reflect + ${kotlin.version} org.jetbrains.kotlin kotlin-stdlib-jdk8 - - - org.springframework.boot - spring-boot-starter-web + ${kotlin.version} @@ -44,27 +34,22 @@ ${testable.version} provided - - org.springframework.boot - spring-boot-starter-test + org.junit.jupiter + junit-jupiter-api + 5.6.2 test - - - org.junit.vintage - junit-vintage-engine - - - ${project.basedir}/src/main/kotlin + src/main/kotlin ${project.basedir}/src/test/kotlin - org.springframework.boot - spring-boot-maven-plugin + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 @@ -86,25 +71,6 @@ - - org.jetbrains.kotlin - kotlin-maven-plugin - - - -Xjsr305=strict - - - spring - - - - - org.jetbrains.kotlin - kotlin-maven-allopen - ${kotlin.version} - - - org.jacoco jacoco-maven-plugin @@ -129,6 +95,27 @@ + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + diff --git a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoApplication.kt b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoApplication.kt deleted file mode 100644 index e2a3ca6..0000000 --- a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoApplication.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.alibaba.testable.demo - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class DemoApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoInheritService.kt b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoInherit.kt similarity index 91% rename from demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoInheritService.kt rename to demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoInherit.kt index 64e6ae4..d813582 100644 --- a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoInheritService.kt +++ b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoInherit.kt @@ -1,12 +1,10 @@ -package com.alibaba.testable.demo.service +package com.alibaba.testable.demo import com.alibaba.testable.demo.model.BlackBox import com.alibaba.testable.demo.model.Box import com.alibaba.testable.demo.model.Color -import org.springframework.stereotype.Service -@Service -class DemoInheritService { +class DemoInherit { /** * call method overridden by sub class via parent class variable diff --git a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoMatcherService.kt b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoMatcher.kt similarity index 92% rename from demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoMatcherService.kt rename to demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoMatcher.kt index 8afdf2d..58efdbd 100644 --- a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoMatcherService.kt +++ b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoMatcher.kt @@ -1,14 +1,12 @@ -package com.alibaba.testable.demo.service +package com.alibaba.testable.demo import com.alibaba.testable.demo.model.BlackBox -import org.springframework.stereotype.Service import java.util.* /** * @author flin */ -@Service -class DemoMatcherService { +class DemoMatcher { /** * Method to be mocked */ diff --git a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoMockService.kt b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoMock.kt similarity index 87% rename from demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoMockService.kt rename to demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoMock.kt index a04ade1..8a8397d 100644 --- a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoMockService.kt +++ b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoMock.kt @@ -1,15 +1,11 @@ -package com.alibaba.testable.demo.service +package com.alibaba.testable.demo import com.alibaba.testable.demo.model.BlackBox -import com.alibaba.testable.demo.model.Box import com.alibaba.testable.demo.model.ColorBox -import org.springframework.stereotype.Service import sun.net.www.http.HttpClient import java.net.URL - -@Service -class DemoMockService { +class DemoMock { /** * method with new operation diff --git a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoPrivateAccessService.kt b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoPrivateAccess.kt similarity index 72% rename from demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoPrivateAccessService.kt rename to demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoPrivateAccess.kt index efca00c..fb1e574 100644 --- a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/service/DemoPrivateAccessService.kt +++ b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/DemoPrivateAccess.kt @@ -1,10 +1,6 @@ -package com.alibaba.testable.demo.service +package com.alibaba.testable.demo -import org.springframework.stereotype.Service - - -@Service -class DemoPrivateAccessService { +class DemoPrivateAccess { private var count = 0 diff --git a/demo/kotlin-demo/src/main/resources/application.properties b/demo/kotlin-demo/src/main/resources/application.properties deleted file mode 100644 index 8b13789..0000000 --- a/demo/kotlin-demo/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ - diff --git a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoApplicationTests.kt b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoApplicationTests.kt deleted file mode 100644 index b64004c..0000000 --- a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoApplicationTests.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.alibaba.testable.demo - -import org.junit.jupiter.api.Test -import org.springframework.boot.test.context.SpringBootTest - -@SpringBootTest -class DemoApplicationTests { - - @Test - fun contextLoads() { - } - -} diff --git a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoInheritServiceTest.kt b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoInheritTest.kt similarity index 85% rename from demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoInheritServiceTest.kt rename to demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoInheritTest.kt index 67e1d24..54bc7d2 100644 --- a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoInheritServiceTest.kt +++ b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoInheritTest.kt @@ -1,4 +1,4 @@ -package com.alibaba.testable.demo.service +package com.alibaba.testable.demo import com.alibaba.testable.core.annotation.TestableMock import com.alibaba.testable.core.matcher.InvokeVerifier @@ -8,7 +8,7 @@ import com.alibaba.testable.demo.model.Color import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -internal class DemoInheritServiceTest { +internal class DemoInheritTest { @TestableMock(targetMethod = "put") private fun put_into_box(self: Box, something: String) { @@ -40,46 +40,46 @@ internal class DemoInheritServiceTest { return "color_from_blackbox" } - private val inheritService = DemoInheritService() + private val demoInherit = DemoInherit() @Test fun should_able_to_mock_call_sub_object_method_by_parent_object() { - val box = inheritService.putIntoBox() as BlackBox + val box = demoInherit.putIntoBox() as BlackBox InvokeVerifier.verify("put_into_box").withTimes(1) Assertions.assertEquals("put_data_into_box", box.get()) } @Test fun should_able_to_mock_call_sub_object_method_by_sub_object() { - val box = inheritService.putIntoBlackBox() + val box = demoInherit.putIntoBlackBox() InvokeVerifier.verify("put_into_blackbox").withTimes(1) Assertions.assertEquals("put_data_into_blackbox", box.get()) } @Test fun should_able_to_mock_call_parent_object_method_by_parent_object() { - val content = inheritService.fromBox + val content = demoInherit.fromBox InvokeVerifier.verify("get_from_box").withTimes(1) Assertions.assertEquals("get_from_box", content) } @Test fun should_able_to_mock_call_parent_object_method_by_sub_object() { - val content = inheritService.fromBlackBox + val content = demoInherit.fromBlackBox InvokeVerifier.verify("get_from_blackbox").withTimes(1) Assertions.assertEquals("get_from_blackbox", content) } @Test fun should_able_to_mock_call_interface_method_by_interface_object() { - val color = inheritService.colorViaColor + val color = demoInherit.colorViaColor InvokeVerifier.verify("get_color_from_color").withTimes(1) Assertions.assertEquals("color_from_color", color) } @Test fun should_able_to_mock_call_interface_method_by_sub_class_object() { - val color = inheritService.colorViaBox + val color = demoInherit.colorViaBox InvokeVerifier.verify("get_color_from_blackbox").withTimes(1) Assertions.assertEquals("color_from_blackbox", color) } diff --git a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoMatcherServiceTest.kt b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoMatcherTest.kt similarity index 82% rename from demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoMatcherServiceTest.kt rename to demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoMatcherTest.kt index fae6c1b..91b21af 100644 --- a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoMatcherServiceTest.kt +++ b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoMatcherTest.kt @@ -1,4 +1,4 @@ -package com.alibaba.testable.demo.service +package com.alibaba.testable.demo import com.alibaba.testable.core.annotation.TestableMock import com.alibaba.testable.core.error.VerifyFailedError @@ -9,33 +9,33 @@ import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -internal class DemoMatcherServiceTest { +internal class DemoMatcherTest { @TestableMock(targetMethod = "methodToBeMocked") - private fun methodWithoutArgument(self: DemoMatcherService) { + private fun methodWithoutArgument(self: DemoMatcher) { } @TestableMock(targetMethod = "methodToBeMocked") - private fun methodWithArguments(self: DemoMatcherService, a1: Any, a2: Any) { + private fun methodWithArguments(self: DemoMatcher, a1: Any, a2: Any) { } @TestableMock(targetMethod = "methodToBeMocked") - private fun methodWithArrayArgument(self: DemoMatcherService, a: Array) { + private fun methodWithArrayArgument(self: DemoMatcher, a: Array) { } - private val demo = DemoMatcherService() + private val demoMatcher = DemoMatcher() @Test fun should_match_no_argument() { - demo.callMethodWithoutArgument() + demoMatcher.callMethodWithoutArgument() InvokeVerifier.verify("methodWithoutArgument").withTimes(1) - demo.callMethodWithoutArgument() + demoMatcher.callMethodWithoutArgument() InvokeVerifier.verify("methodWithoutArgument").withTimes(2) } @Test fun should_match_number_arguments() { - demo.callMethodWithNumberArguments() + demoMatcher.callMethodWithNumberArguments() InvokeVerifier.verify("methodWithArguments").without(InvokeMatcher.anyString(), 2) InvokeVerifier.verify("methodWithArguments").withInOrder(InvokeMatcher.anyInt(), 2) InvokeVerifier.verify("methodWithArguments").withInOrder(InvokeMatcher.anyLong(), InvokeMatcher.anyNumber()) @@ -49,7 +49,7 @@ internal class DemoMatcherServiceTest { @Test fun should_match_string_arguments() { - demo.callMethodWithStringArgument() + demoMatcher.callMethodWithStringArgument() InvokeVerifier.verify("methodWithArguments").with(InvokeMatcher.startsWith("he"), InvokeMatcher.endsWith("ld")) InvokeVerifier.verify("methodWithArguments").with(InvokeMatcher.contains("stab"), InvokeMatcher.matches("m.[cd]k")) InvokeVerifier.verify("methodWithArrayArgument").with(InvokeMatcher.anyArrayOf(String::class.java)) @@ -57,7 +57,7 @@ internal class DemoMatcherServiceTest { @Test fun should_match_object_arguments() { - demo.callMethodWithObjectArgument() + demoMatcher.callMethodWithObjectArgument() InvokeVerifier.verify("methodWithArguments").withInOrder(InvokeMatcher.any(BlackBox::class.java), InvokeMatcher.any(BlackBox::class.java)) InvokeVerifier.verify("methodWithArguments").withInOrder(InvokeMatcher.nullable(BlackBox::class.java), InvokeMatcher.nullable(BlackBox::class.java)) InvokeVerifier.verify("methodWithArguments").withInOrder(InvokeMatcher.isNull(), InvokeMatcher.notNull()) @@ -65,10 +65,10 @@ internal class DemoMatcherServiceTest { @Test fun should_match_with_times() { - demo.callMethodWithNumberArguments() + demoMatcher.callMethodWithNumberArguments() InvokeVerifier.verify("methodWithArguments").with(InvokeMatcher.anyNumber(), InvokeMatcher.any()).times(3) - demo.callMethodWithNumberArguments() + demoMatcher.callMethodWithNumberArguments() var gotError = false try { InvokeVerifier.verify("methodWithArguments").with(InvokeMatcher.anyNumber(), InvokeMatcher.any()).times(4) diff --git a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoMockServiceTest.kt b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoMockTest.kt similarity index 74% rename from demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoMockServiceTest.kt rename to demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoMockTest.kt index 898f4a5..d798cff 100644 --- a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoMockServiceTest.kt +++ b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoMockTest.kt @@ -1,4 +1,4 @@ -package com.alibaba.testable.demo.service +package com.alibaba.testable.demo import com.alibaba.testable.core.annotation.TestableMock import com.alibaba.testable.core.matcher.InvokeVerifier.verify @@ -9,13 +9,13 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import java.util.concurrent.Executors -internal class DemoMockServiceTest { +internal class DemoMockTest { @TestableMock(targetMethod = CONSTRUCTOR) private fun createBlackBox(text: String) = BlackBox("mock_$text") @TestableMock - private fun innerFunc(self: DemoMockService, text: String) = "mock_$text" + private fun innerFunc(self: DemoMock, text: String) = "mock_$text" @TestableMock private fun trim(self: BlackBox) = "trim_string" @@ -37,7 +37,7 @@ internal class DemoMockServiceTest { } @TestableMock - private fun callFromDifferentMethod(self: DemoMockService): String { + private fun callFromDifferentMethod(self: DemoMock): String { return if (TEST_CASE == "should_able_to_get_test_case_name") { "mock_special" } else { @@ -48,23 +48,23 @@ internal class DemoMockServiceTest { } } - private val demoService = DemoMockService() + private val demoMock = DemoMock() @Test fun should_able_to_mock_new_object() { - assertEquals("mock_something", demoService.newFunc()) + assertEquals("mock_something", demoMock.newFunc()) verify("createBlackBox").with("something") } @Test fun should_able_to_mock_member_method() { - assertEquals("{ \"res\": \"mock_hello\"}", demoService.outerFunc("hello")) + assertEquals("{ \"res\": \"mock_hello\"}", demoMock.outerFunc("hello")) verify("innerFunc").with("hello") } @Test fun should_able_to_mock_common_method() { - assertEquals("trim_string__sub_string__false", demoService.commonFunc()) + assertEquals("trim_string__sub_string__false", demoMock.commonFunc()) verify("trim").withTimes(1) verify("sub").withTimes(1) verify("startsWith").withTimes(1) @@ -72,7 +72,7 @@ internal class DemoMockServiceTest { @Test fun should_able_to_mock_static_method() { - assertEquals("White_not_secret_box", demoService.getBox().get()) + assertEquals("White_not_secret_box", demoMock.getBox().get()) verify("secretBox").withTimes(1) verify("createBox").withTimes(1) } @@ -80,10 +80,10 @@ internal class DemoMockServiceTest { @Test fun should_able_to_get_source_method_name() { // synchronous - assertEquals("mock_one_mock_others", demoService.callerOne() + "_" + demoService.callerTwo()) + assertEquals("mock_one_mock_others", demoMock.callerOne() + "_" + demoMock.callerTwo()) // asynchronous assertEquals("mock_one_mock_others", Executors.newSingleThreadExecutor().submit { - demoService.callerOne() + "_" + demoService.callerTwo() + demoMock.callerOne() + "_" + demoMock.callerTwo() }.get()) verify("callFromDifferentMethod").withTimes(4) } @@ -91,10 +91,10 @@ internal class DemoMockServiceTest { @Test fun should_able_to_get_test_case_name() { // synchronous - assertEquals("mock_special", demoService.callerOne()) + assertEquals("mock_special", demoMock.callerOne()) // asynchronous assertEquals("mock_special", Executors.newSingleThreadExecutor().submit { - demoService.callerOne() + demoMock.callerOne() }.get()) verify("callFromDifferentMethod").withTimes(2) } diff --git a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoPrivateAccessTest.kt b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoPrivateAccessTest.kt new file mode 100644 index 0000000..317ffb7 --- /dev/null +++ b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/DemoPrivateAccessTest.kt @@ -0,0 +1,30 @@ +package com.alibaba.testable.demo + +import com.alibaba.testable.core.accessor.PrivateAccessor +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + + +internal class DemoPrivateAccessTest { + + private val demoPrivateAccess = DemoPrivateAccess() + + @Test + fun should_able_to_access_private_method() { + assertEquals("hello - 1", PrivateAccessor.invoke(demoPrivateAccess, "privateFunc", "hello", 1)) + } + + @Test + fun should_able_to_access_private_field() { + PrivateAccessor.set(demoPrivateAccess, "count", 3) + assertEquals("5", demoPrivateAccess.privateFieldAccessFunc()) + assertEquals(5, PrivateAccessor.get(demoPrivateAccess, "count")) + } + + @Test + fun should_able_to_update_final_field() { + PrivateAccessor.set(demoPrivateAccess, "pi", 4.13) + assertEquals(4.13, demoPrivateAccess.pi) + } + +} diff --git a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoPrivateAccessServiceTest.kt b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoPrivateAccessServiceTest.kt deleted file mode 100644 index 05db7f1..0000000 --- a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/service/DemoPrivateAccessServiceTest.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.alibaba.testable.demo.service - -import com.alibaba.testable.core.accessor.PrivateAccessor -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Test - - -internal class DemoPrivateAccessServiceTest { - - private val demoService = DemoPrivateAccessService() - - @Test - fun should_able_to_access_private_method() { - assertEquals("hello - 1", PrivateAccessor.invoke(demoService, "privateFunc", "hello", 1)) - } - - @Test - fun should_able_to_access_private_field() { - PrivateAccessor.set(demoService, "count", 3) - assertEquals("5", demoService.privateFieldAccessFunc()) - assertEquals(5, PrivateAccessor.get(demoService, "count")) - } - - @Test - fun should_able_to_update_final_field() { - PrivateAccessor.set(demoService, "pi", 4.13) - assertEquals(4.13, demoService.pi) - } - -} diff --git a/docs/frequency-asked-questions.md b/docs/frequency-asked-questions.md index be7e6c8..7bfd4f4 100644 --- a/docs/frequency-asked-questions.md +++ b/docs/frequency-asked-questions.md @@ -13,7 +13,7 @@ 因此,不论被调用方法来自父类还是子类,也不论子类是否覆写该方法,Mock方法的首个参数类型都应该使用变量自身的接口或父类类型。 -参见Java和Kotlin示例中`DemoInheritServiceTest`测试类的用例。 +参见Java和Kotlin示例中`DemoInheritTest`测试类的用例。 #### 3. `TestableMock`能否用于Android项目的测试? diff --git a/docs/matcher.md b/docs/matcher.md index 9161944..a2dd045 100644 --- a/docs/matcher.md +++ b/docs/matcher.md @@ -17,7 +17,7 @@ public test_case() { 除了这种简单校验以外,TestableMock当前已经支持了多种**校验器**,以及能够模糊匹配参数特征的**匹配器**。 -在示例项目`java-demo`和`kotlin-demo`中的`DemoMatcherServiceTest`测试类详细展示了这些校验器和匹配器的用法。 +在示例项目`java-demo`和`kotlin-demo`中的`DemoMatcherTest`测试类详细展示了这些校验器和匹配器的用法。 ## 基本校验器 diff --git a/docs/usage.md b/docs/usage.md index 3880f12..f54c4fa 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -53,7 +53,7 @@ 若不希望看到IDE的语法错误提醒,或是在基于JVM的非Java语言项目里(譬如Kotlin语言),也可以借助`PrivateAccessor`工具类来实现私有成员的访问。 -效果见`java-demo`和`kotlin-demo`示例项目中`DemoPrivateAccessService`类的测试用例。 +效果见`java-demo`和`kotlin-demo`示例项目中`DemoPrivateAccessTest`测试类的用例。 ### Mock被测类的任意方法调用 @@ -89,10 +89,10 @@ private String substring(String self, int i, int j) { 例如,被测类中有一个签名为`String innerFunc(String)`的私有方法,我们希望在测试的时候将它替换掉,则只需在测试类定义如下方法: ```java -// 被测类型是`DemoMockService` -// 因此在定义Mock方法时,在目标方法参数首位加一个类型为`DemoMockService`的参数(名字随意) +// 被测类型是`DemoMock` +// 因此在定义Mock方法时,在目标方法参数首位加一个类型为`DemoMock`的参数(名字随意) @TestableMock -private String innerFunc(DemoMockService self, String text) { +private String innerFunc(DemoMock self, String text) { return "mock_" + text; } ``` diff --git a/testable-agent/src/test/java/com/alibaba/testable/agent/handler/SourceClassHandlerTest.java b/testable-agent/src/test/java/com/alibaba/testable/agent/handler/SourceClassHandlerTest.java index 71944d3..fce756b 100644 --- a/testable-agent/src/test/java/com/alibaba/testable/agent/handler/SourceClassHandlerTest.java +++ b/testable-agent/src/test/java/com/alibaba/testable/agent/handler/SourceClassHandlerTest.java @@ -27,7 +27,7 @@ class SourceClassHandlerTest { new InsnNode(ICONST_1), new InsnNode(ICONST_2), new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "substring", "(II)Ljava/lang/String;", false), - new MethodInsnNode(INVOKESPECIAL, "com/alibaba/testable/demo/DemoServiceTest", "blackBox", "(Ljava/lang/String;)Lcom/alibaba/testable/demo/BlackBox;", false), + new MethodInsnNode(INVOKESPECIAL, "com/alibaba/testable/demo/DemoTest", "blackBox", "(Ljava/lang/String;)Lcom/alibaba/testable/demo/BlackBox;", false), new MethodInsnNode(INVOKEVIRTUAL, "com/alibaba/testable/demo/BlackBox", "callMe", "()Ljava/lang/String;", false), new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "startsWith", "(Ljava/lang/String;)Z", false) };