面试题答案
一键面试引入JUnit依赖
- 在Kotlin项目的
build.gradle
文件(如果是Gradle构建)中添加JUnit依赖:
testImplementation 'junit:junit:4.13.2' // 以JUnit 4.13.2为例
如果是Maven项目,在pom.xml
中添加:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
编写测试类
- 创建测试类,通常与被测试类在相同的包下,命名规则一般为被测试类名加上
Test
后缀。例如,被测试类为Calculator
,则测试类名为CalculatorTest
。 - 测试类需要继承
TestCase
类(JUnit 4也可不继承,但JUnit 3需要继承)。
import org.junit.Test
class CalculatorTest {
// 测试方法将在下面编写
}
编写测试方法
- 测试方法需要使用
@Test
注解标记。 - 方法通常为
public void
类型。 - 例如,假设
Calculator
类有一个add
方法,用于两个整数相加:
import org.junit.Test
import kotlin.test.assertEquals
class CalculatorTest {
@Test
fun testAdd() {
val calculator = Calculator()
val result = calculator.add(2, 3)
assertEquals(5, result)
}
}
class Calculator {
fun add(a: Int, b: Int): Int {
return a + b
}
}
JUnit常用注解
@Test
:标记一个方法为测试方法。@Before
:标记的方法会在每一个测试方法执行之前执行。常用于初始化一些测试所需的资源。
import org.junit.Before
import org.junit.Test
class ExampleTest {
private lateinit var exampleObject: ExampleClass
@Before
fun setUp() {
exampleObject = ExampleClass()
}
@Test
fun testSomeMethod() {
// 使用exampleObject进行测试
}
}
class ExampleClass {
// 类定义
}
@After
:标记的方法会在每一个测试方法执行之后执行。常用于释放资源,如关闭文件、数据库连接等。
import org.junit.After
import org.junit.Test
class ExampleTest {
private lateinit var exampleObject: ExampleClass
@After
fun tearDown() {
// 释放exampleObject相关资源
}
@Test
fun testSomeMethod() {
exampleObject = ExampleClass()
// 使用exampleObject进行测试
}
}
class ExampleClass {
// 类定义
}
@BeforeClass
:标记的方法会在当前测试类的所有测试方法执行之前执行一次。该方法必须是static
(在Kotlin中使用companion object
实现类似效果)。常用于初始化一些全局资源,如数据库连接池。
import org.junit.BeforeClass
import org.junit.Test
class ExampleTest {
companion object {
@BeforeClass
@JvmStatic
fun setUpClass() {
// 初始化全局资源
}
}
@Test
fun testSomeMethod() {
// 测试方法
}
}
@AfterClass
:标记的方法会在当前测试类的所有测试方法执行之后执行一次。该方法必须是static
(在Kotlin中使用companion object
实现类似效果)。常用于释放全局资源。
import org.junit.AfterClass
import org.junit.Test
class ExampleTest {
companion object {
@AfterClass
@JvmStatic
fun tearDownClass() {
// 释放全局资源
}
}
@Test
fun testSomeMethod() {
// 测试方法
}
}
@Ignore
:标记的测试方法将不会被执行。常用于暂时跳过某个测试,比如该测试依赖的外部服务不可用等情况。
import org.junit.Ignore
import org.junit.Test
class ExampleTest {
@Ignore("暂时跳过该测试")
@Test
fun testSomeMethod() {
// 该方法不会被执行
}
}