Mockito支持对变量进行注解,例如将mock对象设为测试类的属性,然后通过注解的方式@Mock来定义它,这样有利于减少重复代码,增强可读性,易于排查错误等。除了支持@Mock,Mockito支持的注解还有@Spy(监视真实的对象),@Captor(参数捕获器),@InjectMocks(mock对象自动注入)。
Annotation的初始化
只有Annotation还不够,要让它们工作起来还需要进行初始化工作。初始化的方法为:MockitoAnnotations.initMocks(testClass)参数testClass是你所写的测试类。一般情况下在Junit4的@Before定义的方法中执行初始化工作,如下:
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
除了上述的初始化的方法外,还可以使用Mockito提供的Junit Runner:MockitoJUnitRunner这样就省略了上面的步骤。
@RunWith(MockitoJUnit44Runner.class)
public class ExampleTest {
...
}
@Mock注解
使用@Mock注解来定义mock对象有如下的优点:
1. 方便mock对象的创建
2. 减少mock对象创建的重复代码
3. 提高测试代码可读性
4. 变量名字作为mock对象的标示,所以易于排错
@Mock注解也支持自定义name和answer属性。
下面是官方给出的@Mock使用的例子:
public class ArticleManagerTest extends SampleBaseTestCase {
@Mock
private ArticleCalculator calculator;
@Mock(name = "dbMock")
private ArticleDatabase database;
@Mock(answer = RETURNS_MOCKS)
private UserProvider userProvider;
private ArticleManager manager;
@Before
public void setup() {
manager = new ArticleManager(userProvider, database, calculator);
}
}
public class SampleBaseTestCase {
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
}
@Spy注解
Spy的使用方法请参阅前面的章节,在此不再赘述,下面是使用方法:
public class Test{
@Spy
Foo spyOnFoo = new Foo();
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
...
}
@Captor注解
@Captor是参数捕获器的注解,有关用法见前章,通过注解的方式也可以更便捷的对它进行定义。使用例子如下:
public class Test {
@Captor
ArgumentCaptor<AsyncCallback<Foo>> captor;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void shouldDoSomethingUseful() {
// ...
verify(mock.doStuff(captor.capture()));
assertEquals("foo", captor.getValue());
}
}
@InjectMocks注解
通过这个注解,可实现自动注入mock对象。当前版本只支持setter的方式进行注入,Mockito首先尝试类型注入,如果有多个类型相同的mock对象,那么它会根据名称进行注入。当注入失败的时候Mockito不会抛出任何异常,所以你可能需要手动去验证它的安全性。
例:
@RunWith(MockitoJUnit44Runner.class)
public class ArticleManagerTest {
@Mock
private ArticleCalculator calculator;
@Mock
private ArticleDatabase database;
@Spy
private UserProvider userProvider = new ConsumerUserProvider();
@InjectMocks
private ArticleManager manager = new ArticleManager();
@Test
public void shouldDoSomething() {
manager.initiateArticle();
verify(database).addListener(any(ArticleListener.class));
}
}
上例中,ArticleDatabase是ArticleManager的一个属性,由于ArticleManager是注解@InjectMocks标注的,所以会根据类型自动调用它的setter方法为它设置ArticleDatabase。
分享到:
相关推荐
**单元测试**是软件开发过程中的重要环节,它允许开发者对程序的各个模块进行独立验证,确保它们在预期情况下能够正确工作。在这个压缩包中,包含的是两个关键工具:JUnit 4.12 和 Mockito,它们是Java开发中广泛...
7. **测试与调试**:SSH2-Annotation项目可能还包含了单元测试和集成测试的相关代码,例如使用JUnit或Mockito进行测试,以确保代码的质量和功能的正确性。 8. **最佳实践**:此项目展示了如何在现代Java Web开发中...
em-annotation-app/ ./buildrundm-docker.sh # Run this script to aquire IDAM credentials required for DM API. ./idam.sh 一体化 目前这里有一个 Java 客户端可用: 招摇的用户界面 要查看我们的 REST API,请转...
#### Mockito对Annotation的支持 Mockito还支持一些注解来简化mock对象的创建和配置。例如: - `@Mock`:用于创建mock对象。 - `@Spy`:用于创建spy对象。 - `@Captor`:用于创建`ArgumentCaptor`。 通过上述介绍...
Spring MVC 提供了对单元测试的良好支持,使得我们可以方便地测试控制器、服务层以及数据访问层。 在Spring MVC中进行单元测试,我们通常会用到以下关键技术和工具: 1. **JUnit**:JUnit是Java编程语言中最常用的...
7. **整合与配置**:SSH项目的整合涉及到Spring配置文件中对Struts、Hibernate的配置,以及这三个框架之间的交互。例如,Spring管理Struts的Action,Hibernate的数据源和SessionFactory等。 8. **测试与部署**:在...
2. **Annotation支持**:注解在Java开发中已经成为一种常见的元数据声明方式。通过引入注解,我们可以简化配置,比如在Action类或方法上使用注解来指定请求映射、输入输出结果等,这使得代码更易读,也减少了XML配置...
Annotation Processor 的项目。 还要检查库和测试框架是否可以使用它。 首先,确保你知道什么是JACK&JILL。 检查这个。 支持的工具 即时运行 数据绑定( android.dataBinding.enabled = true会失败) 缩小测试(为...
在API测试领域,Mock MVC是Spring框架提供的一种强大的工具,用于模拟Spring MVC应用程序的...通过学习和实践这些示例,你将更好地理解和掌握如何在Java中使用Mock MVC进行API测试,从而提高你的测试技能和代码质量。
7. **单元测试与集成测试**:Spring Boot支持JUnit和Mockito等测试框架,帮助开发者编写高质量的测试用例,确保代码的稳定性和正确性。 8. **部署与运行**:项目可以通过命令行运行`mvnw`脚本来启动,或者通过构建...
【adapter-annotations-1.0.0-source-release.zip】是一个包含源代码的压缩包,主要用于提供`adapter`库的注解支持。这个1.0.0版本是该库的一个发行版,提供了对开发者友好的API和注解,帮助他们在开发过程中更方便...
- 学习JUnit、Mockito等进行单元测试。 - 熟悉持续集成工具,如Jenkins。 13. **软件工程与项目管理**: - 掌握敏捷开发理念,如Scrum、Kanban。 - 学习需求分析、项目规划和文档编写。 14. **数据库基础**: ...
综上所述,"148-时间管理系统--源码.zip"是一个基于Spring Boot的时间管理项目,通过合理的目录结构和强大的框架支持,实现了对时间任务的有效管理。开发者可以通过阅读源代码,学习如何利用Spring Boot构建实际的...
结合JUnit和Mockito,可以对整合后的系统进行单元测试,确保每个组件的正确性。对于Service和DAO层,可以使用内存数据库如HSQLDB来进行快速的集成测试。 9. **部署与优化**: 在实际应用中,需要考虑性能优化,如...
- **IDE支持**:Eclipse、IntelliJ IDEA等主流IDE都提供了内置的JUnit支持,方便编写和运行测试。 - **持续集成**:JUnit与Jenkins、Travis CI等持续集成工具结合,可实现自动化测试和构建。 5. **最佳实践**: ...
- `提纲.doc`可能包含对JUnit学习的结构化大纲,帮助系统学习。 - `testingandroid-090828164936-phpapp02.pdf`可能是关于Android测试的详细指南,可能涵盖JUnit在Android开发中的实践。 - `Fibonacci.pdf`可能...
在Spring 2.5.5中,注解驱动的开发(Annotation-driven development)已经变得非常流行,比如使用`@Autowired`、`@Component`、`@Service`、`@Repository`和`@Controller`等注解,简化了组件扫描和自动装配的过程。...
- **注解(Annotation)**:理解注解的作用,如何自定义注解及注解处理器。 - **JNI(Java Native Interface)**:与C/C++等本地代码交互,实现性能优化或调用特定库。 4. **框架篇** - **Spring框架**:学习...