From 419a10669d837710d3c09f6ee47b4c1ecc525875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Mon, 26 Oct 2020 20:39:12 +0800 Subject: [PATCH] add case to test kotlin invoke java method --- .../com/alibaba/testable/demo/PathUtil.kt | 27 +++++++++++ .../com/alibaba/testable/demo/PathUtilTest.kt | 48 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/PathUtil.kt create mode 100644 demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/PathUtilTest.kt diff --git a/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/PathUtil.kt b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/PathUtil.kt new file mode 100644 index 0000000..183c8c1 --- /dev/null +++ b/demo/kotlin-demo/src/main/kotlin/com/alibaba/testable/demo/PathUtil.kt @@ -0,0 +1,27 @@ +package com.alibaba.testable.demo + +import java.io.File +import java.io.IOException + +object PathUtil { + + fun deleteRecursively(file: File) { + if (!file.exists()) { + return + } + val fileList = file.listFiles() + if (fileList != null) { + for (childFile in fileList) { + if (childFile.isDirectory) { + deleteRecursively(childFile) + } else if (!childFile.delete()) { + throw IOException() + } + } + } + if (file.exists() && !file.delete()) { + throw IOException("Unable to delete file " + file.absolutePath) + } + } + +} diff --git a/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/PathUtilTest.kt b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/PathUtilTest.kt new file mode 100644 index 0000000..77b9d2e --- /dev/null +++ b/demo/kotlin-demo/src/test/kotlin/com/alibaba/testable/demo/PathUtilTest.kt @@ -0,0 +1,48 @@ +package com.alibaba.testable.demo + +import org.junit.jupiter.api.Test +import com.alibaba.testable.core.annotation.TestableMock +import com.alibaba.testable.core.tool.TestableTool.verify +import java.io.File + +class PathUtilTest { + + @TestableMock + fun exists(f: File): Boolean { + return when (f.absolutePath) { + "/a/b" -> true + "/a/b/c" -> true + else -> f.exists() + } + } + + @TestableMock + fun isDirectory(f: File): Boolean { + return when (f.absolutePath) { + "/a/b/c" -> true + else -> f.isDirectory + } + } + + @TestableMock + fun delete(f: File): Boolean { + return true + } + + @TestableMock + fun listFiles(f: File): Array? { + return when (f.absolutePath) { + "/a/b" -> arrayOf(File("/a/b/c"), File("/a/b/d")) + "/a/b/c" -> arrayOf(File("/a/b/c/e")) + else -> f.listFiles() + } + } + + @Test + fun should_able_to_mock_java_method_invoke_in_kotlin() { + PathUtil.deleteRecursively(File("/a/b/")) + verify("listFiles").times(2) + verify("delete").times(4) + } + +}