📅  最后修改于: 2023-12-03 15:15:57.198000             🧑  作者: Mango
Mockito 是一个流行的 Java 测试框架,可以让开发者创建测试时所需的 mock 对象。Mockito 可以用于验证代码中的行为是否正确地与其他对象进行交互。
你可以在项目的 pom.xml
文件中添加以下依赖来导入 Mockito:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.8.0</version>
<scope>test</scope>
</dependency>
假设你要测试一个需要依赖其他对象的类 MyClass
,你可以使用 Mockito 来创建这些依赖:
public class MyClass {
private Dependency dependency;
public MyClass(Dependency dependency) {
this.dependency = dependency;
}
public void doSomething() {
dependency.doSomethingElse();
}
}
public interface Dependency {
void doSomethingElse();
}
然后,你可以使用以下代码来测试 MyClass
类的行为是否正确:
import org.junit.Test;
import org.mockito.Mockito;
public class MyClassTest {
@Test
public void testDoSomething() {
Dependency dependency = Mockito.mock(Dependency.class);
MyClass myClass = new MyClass(dependency);
myClass.doSomething();
Mockito.verify(dependency).doSomethingElse();
}
}
在上述代码中,我们通过 Mockito.mock(Dependency.class)
创建了一个名为 dependency
的 mock 对象。然后,我们使用这个 mock 对象来创建一个 MyClass
实例并调用其 doSomething()
方法。最后,我们使用 Mockito.verify(dependency)
来验证 dependency
对象的 doSomethingElse()
方法是否被调用过。
你可以使用 Mockito.when()
方法自定义 mock 对象的返回值。
import org.junit.Test;
import org.mockito.Mockito;
public class MyClassTest {
@Test
public void testDoSomething() {
Dependency dependency = Mockito.mock(Dependency.class);
MyClass myClass = new MyClass(dependency);
Mockito.when(dependency.doSomethingElse()).thenReturn("Hello!");
myClass.doSomething();
Mockito.verify(dependency).doSomethingElse();
}
}
在上述代码中,我们使用 Mockito.when(dependency.doSomethingElse()).thenReturn("Hello!")
方法来告诉 Mockito,在调用 dependency.doSomethingElse()
方法时应该返回字符串 "Hello!"。
你可以使用 Mockito.doThrow()
方法来模拟抛出异常。
import org.junit.Test;
import org.mockito.Mockito;
public class MyClassTest {
@Test(expected = MyException.class)
public void testDoSomething() {
Dependency dependency = Mockito.mock(Dependency.class);
MyClass myClass = new MyClass(dependency);
Mockito.doThrow(new MyException()).when(dependency).doSomethingElse();
myClass.doSomething();
}
}
在上述代码中,我们使用 Mockito.doThrow(new MyException()).when(dependency).doSomethingElse()
方法来告诉 Mockito,在调用 dependency.doSomethingElse()
方法时应该抛出一个 MyException
异常。
你可以使用 @RunWith(Parameterized.class)
注解和 @Parameters
方法来实现数据驱动测试。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.mockito.Mockito;
import java.util.Arrays;
import java.util.Collection;
@RunWith(Parameterized.class)
public class MyClassTest {
private final String input;
private final String output;
public MyClassTest(String input, String output) {
this.input = input;
this.output = output;
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{
{"input1", "output1"},
{"input2", "output2"},
{"input3", "output3"}
});
}
@Test
public void testDoSomething() {
Dependency dependency = Mockito.mock(Dependency.class);
MyClass myClass = new MyClass(dependency);
Mockito.when(dependency.doSomethingElse(input)).thenReturn(output);
String result = myClass.doSomething(input);
Assert.assertEquals(output, result);
}
}
在上述代码中,我们在 MyClassTest
类上使用了 @RunWith(Parameterized.class)
注解。然后,我们在类中定义了若干个 @Parameters
方法,这些方法会返回一个包含输入和输出参数的二维数组。最后,我们在测试方法中使用 Mockito.when(dependency.doSomethingElse(input)).thenReturn(output)
方法来告诉 Mockito,在调用 dependency.doSomethingElse(input)
方法时应该返回指定的输出值。