在 Kotlin 中进行单元测试通常使用 JUnit(JUnit 4 或 JUnit 5)配合 Kotlin 测试库。下面是一步一步的介绍,从环境配置到常见写法。
dependencies {
testImplementation("junit:junit:4.13.2")
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
}
test {
useJUnitPlatform()
}
testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
标准结构:
src
├── main
│ └── kotlin
│ └── Calculator.kt
└── test
└── kotlin
└── CalculatorTest.kt
class Calculator {
fun add(a: Int, b: Int): Int = a + b
}
import org.junit.Test
import org.junit.Assert.*
class CalculatorTest {
private val calculator = Calculator()
@Test
fun testAdd() {
val result = calculator.add(2, 3)
assertEquals(5, result)
}
}
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.*
class CalculatorTest {
private val calculator = Calculator()
@Test
fun `add should return correct sum`() {
val result = calculator.add(2, 3)
assertEquals(5, result)
}
}
✅ Kotlin 支持 反引号函数名,测试可读性更好
assertEquals(expected, actual)
assertTrue(condition)
assertFalse(condition)
assertNull(value)
assertNotNull(value)
assertThrows<Exception> { ... }
import org.junit.jupiter.api.*
class ExampleTest {
@BeforeEach
fun setup() {
println("测试前执行")
}
@AfterEach
fun teardown() {
println("测试后执行")
}
@Test
fun testSomething() { }
}
testImplementation("io.mockk:mockk:1.13.9")
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
class UserServiceTest {
private val userRepository = mockk<UserRepository>()
private val userService = UserService(userRepository)
@Test
fun `should return user name`() {
every { userRepository.getName(1) } returns "Alice"
val name = userService.getUserName(1)
assertEquals("Alice", name)
verify { userRepository.getName(1) }
}
}
./gradlew test
✅ 一个测试只验证一个行为
✅ 使用清晰的方法名(推荐反引号)
✅ 不依赖测试执行顺序
✅ 外部依赖用 Mock
✅ 测试应快速、稳定、可重复
如果你有具体场景(如 Android、Coroutine、ViewModel、Spring Boot),我可以给你更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。