请写出Java代码以下3中情况mock的用例 1、被测函数调用了当前类的其他方法; 2、被测函数调用了其他类的方法,其他类在当前类中实例化一个对象; 3、被测函数调用了其他类的方法,其他类在被测函数中中实例化一个对象;
时间: 2024-10-24 16:17:25 浏览: 21
在Java中,为了模拟(mock)某些特定场景,我们通常使用Mockito这样的单元测试框架。以下是针对三种不同情况的mock用例:
1. 被测函数调用了当前类的其他方法:
```java
import static org.mockito.Mockito.*;
public class MyClass {
private MyDependency dependency;
@Before
public void setUp() {
// 创建并初始化mock对象
dependency = mock(MyDependency.class);
}
@Test
public void testMethodThatCallsOtherMethod() {
// 钩子函数,让依赖的方法返回预设值或行为
when(dependency.myMethod()).thenReturn("mocked result");
// 调用被测方法,会自动触发mock的行为
String result = myFunction();
assertEquals("mocked result", result);
verify(dependency).myMethod(); // 确保依赖方法被调用
}
}
class MyDependency {
public String myMethod() { /* 实现 */ }
}
```
2. 被测函数调用了其他类的方法,其他类在当前类中实例化一个对象:
```java
public class MyClass {
private OtherClass other;
@BeforeEach
public void setupOtherClassMock() {
other = mock(OtherClass.class);
}
@Test
public void testMethodUsingOtherClassInstance() {
// 模拟OtherClass的方法行为
when(other.someMethod()).thenReturn("mocked result");
// 在被测方法中使用mock对象
String result = myFunctionThatUsesOther(other);
assertEquals("mocked result", result);
verify(other).someMethod();
}
}
class OtherClass {
public String someMethod() { /* 实现 */ }
}
```
3. 被测函数调用了其他类的方法,其他类在被测函数中创建一个对象:
```java
public class MyClass {
@Test
public void testMethodWithInnerClassInstantiation() {
// 创建内部类的mock对象
InnerClass innerMock = mock(InnerClass.class);
// 在被测方法中使用这个mock对象
doReturn("mocked result").when(innerMock).someMethod();
String result = myFunctionCreatingInner(innerMock);
assertEquals("mocked result", result);
verify(innerMock).someMethod();
}
private String myFunctionCreatingInner(InnerClass inner) {
// 在这里,inner实际上会被替换为mock对象
return inner.someMethod();
}
class InnerClass {
public String someMethod() { /* 实现 */ }
}
}
```
阅读全文