在单元测试中,有assert来判断测试的结果,verfiy来判断执行的次数和顺序,doAnswer用来判断执行的方法和方法的参数。
doAnswer一般和when配合使用,当条件满足是,执行对应的Answer的answer方法,如果answer方法抛出异常,那么测试不通过。
这是我的一个实例:
import java.util.List;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import static org.mockito.Mockito.*;
public class CustomAnswer implements Answer<String> {
public String answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
Integer num = (Integer)args[0];
if( num>3 ){
return "yes";
} else {
throw new RuntimeException();
}
}
@Test
public void customAnswerTest(){
List<String> mock = mock(List.class);
Mockito.doAnswer(new CustomAnswer()).when(mock).get(anyInt());
mock.get(4);
mock.get(2);
}
}
当 mock.get(2); 的时候,执行判断,这个时候num>3 不成立,抛出异常,测试不通过。
answer方法中通过参数invocation能获取的东西是这些:一般判断方法的参数
public interface InvocationOnMock extends Serializable {
/**
* returns the mock object
*
* @return mock object
*/
Object getMock();
/**
* returns the method
*
* @return method
*/
Method getMethod();
/**
* returns arguments passed to the method
*
* @return arguments
*/
Object[] getArguments();
/**
* calls real method
* <p>
* <b>Warning:</b> depending on the real implementation it might throw exceptions
*
* @return whatever the real method returns / throws
* @throws Throwable in case real method throws
*/
Object callRealMethod() throws Throwable;
}
分享到:
相关推荐
Mockito 是一个流行的Java单元测试框架,用于模拟对象行为,使得测试更为简洁和可控。JUnit则是最常用的Java单元测试库,它提供了一种结构化的方式来编写和运行测试用例。当我们进行单元测试时,Mockito 和 JUnit ...
在这个压缩包中,包含的是两个关键工具:JUnit 4.12 和 Mockito,它们是Java开发中广泛使用的单元测试框架。 **JUnit** 是一个开源的Java单元测试框架,它的版本4.12提供了许多增强的功能,包括注解(Annotation)...
赠送jar包:mockito-core-4.0.0.jar; 赠送原API文档:mockito-core-4.0.0-javadoc.jar; 赠送源代码:mockito-core-4.0.0-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:mockito-core-2.15.0.jar; 赠送原API文档:mockito-core-2.15.0-javadoc.jar; 赠送源代码:mockito-core-2.15.0-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:mockito-core-4.0.0.jar; 赠送原API文档:mockito-core-4.0.0-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
PowerMock是一个扩展了其他Mocking框架(如EasyMock和Mockito)的库,它允许开发者对静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器进行模拟和mock。在传统测试框架中,这些通常是难以或无法测试...
Mockito还支持一些注解来简化mock对象的创建和配置。例如: - `@Mock`:用于创建mock对象。 - `@Spy`:用于创建spy对象。 - `@Captor`:用于创建`ArgumentCaptor`。 通过上述介绍,我们不仅了解了Mockito的基本...
6. **javadoc**:这个目录可能包含Mockito 1.9.0的Java API文档,对于理解Mockito类和方法的用途和用法非常有帮助。通过查看Javadoc,开发者可以快速查找API方法的说明、参数、返回值和示例。 7. **sources**:这个...
mockito-all-1.10.19.jar mockito-core-4.5.1.jar mockito-junit-jupiter-4.5.1.jar mockito-junit-jupiter-4.5.1-sources.jar
总的来说,Mockito 提供了强大的模拟功能,使得 Java 开发者在进行单元测试和 TDD 时能够更有效地控制和验证代码行为。通过熟练掌握 Mockito,你可以提高代码质量,降低维护成本,增强软件的可靠性。
**Mockito** 是一个开源的 Java 测试框架,它被设计用于帮助开发者创建模拟对象(mock objects),以便于进行单元测试,支持 **Test-Driven Development (TDD)** 和 **Behavior Driven Development (BDD)** 的开发...
3. **Stubbing方法**:通过`when()`和`thenReturn()`, `thenThrow()`, `doNothing()`, `doAnswer()`等方法,可以指定mock对象的方法调用应该返回什么,或者抛出异常。 ```java when(myMock.someMethod()).then...
- `doAnswer`和`doThrow`可以自定义模拟方法的行为,比如抛出异常或执行特定操作。 3. **Mocking和Stubbing** - Mocking表示完全模拟一个对象,所有调用都会返回预设的值。 - Stubbing则是对特定方法设定返回值...
- **创建方式**:使用`Mockito.doAnswer()`或`Mockito.doReturn()`来指定部分方法的行为。 - **扩展**:对于final类,可以通过`@Spy`和`@Delegate`注解来实现部分模拟。 #### 五、高级主题 - **实验性特性**:如...
Mockito是一款广泛应用于Java开发中的测试驱动开发(TDD)工具,它允许开发者创建和配置模拟对象,以便在测试中隔离代码并验证特定方法的行为。这本书详细介绍了如何有效地利用Mockito来编写整洁、可维护的测试代码...
mockito-all-1.10.5
内容概要:参考Mockito官方API文档,实践框架每个特性。 适合人群:Mockito入门人员以及想全面熟悉Mockito特性的人员,做到了开箱即用。 能学到什么:“Mockito 4.6.0 + Junit 5”的组合编程。 使用建议:使用前安装...
赠送jar包:powermock-api-mockito2-2.0.9.jar; 赠送原API文档:powermock-api-mockito2-2.0.9-javadoc...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
赠送jar包:mockito-core-3.8.0.jar; 赠送原API文档:mockito-core-3.8.0-javadoc.jar; 赠送源代码:mockito-core-3.8.0-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Mockito for spring Mockito for spring Mockito for spring Mockito for spring Mockito for spring Mockito for spring Mockito for spring Mockito for spring Mockito for spring Mockito for spring Mockito ...