Mockito有一些非常好用的annotation来简化mock的创建和注入
@Mock
创建一个该类型的mock,可用标注在类,接口上
@InjectMocks该注解标注的对象会自动注入@Mock标注创建的Mock,省去了手工set依赖的过程,非常好用。
看看上一篇里的列子
public class NotifyService {
private UserCenter uc;
private MessageCenter mc;
public void sendMessage(long userId, String message) {
String email = uc.getUser(userId).getEmail();
mc.sendEmail(email, message);
}
public void setUc(UserCenter uc) {
this.uc = uc;
}
public void setMc(MessageCenter mc) {
this.mc = mc;
}
}
这是我们需要测试的类
如果不用注解,我们的单元测试需要手工创建mock并注入到被测试的对象中。就像前一篇http://jilen.iteye.com/blog/1384898中的单元测试
public class NotifyServiceTest {
private NotifyService notifyService;
private UserCenter uc;
private MessageCenter mc;
@Before
public void setUp() {
notifyService = new NotifyService();
uc = mock(UserCenter.class);
mc = mock(MessageCenter.class);
notifyService.setUc(uc);
notifyService.setMc(mc);
}
@Test
public void testSendMessage() {
long userId = 1L;
String email = "foo@bar";
when(uc.getUser(userId)).thenReturn(createUserWithEmail(email));
notifyService.sendMessage(userId, "hello");
verify(mc).sendEmail(eq(email), eq("hello"));
}
private User createUserWithEmail(String email) {
User user = new User();
user.setEmail(email);
return user;
}
}
setUp方法中mock,并注入依赖
使用注解之后可用简化为
@RunWith(MockitoJUnitRunner.class)
public class NotifyServiceTest {
@InjectMocks
private NotifyService notifyService = new NotifyService();
@Mock
private UserCenter uc;
@Mock
private MessageCenter mc;
@Test
public void testSendMessage() {
long userId = 1L;
String email = "foo@bar";
when(uc.getUser(userId)).thenReturn(createUserWithEmail(email));
notifyService.sendMessage(userId, "hello");
verify(mc).sendEmail(eq(email), eq("hello"));
}
private User createUserWithEmail(String email) {
User user = new User();
user.setEmail(email);
return user;
}
}
不再需要手动创建mock和调用set了,简化了代码。
等等,@RunWith(MockitoJUnitRunner.class)是什么?
这是告诉junit使用MockitoJunitRunner来运行该test case,这样才会处理各种注解。
嫌啰嗦?可用创建一个基类标注上该注解,然后继承它
分享到:
相关推荐
在这个压缩包中,包含的是两个关键工具:JUnit 4.12 和 Mockito,它们是Java开发中广泛使用的单元测试框架。 **JUnit** 是一个开源的Java单元测试框架,它的版本4.12提供了许多增强的功能,包括注解(Annotation)...
这里我们关注的是`junit-4.10.jar`,这是一个JUnit 4.10版本的库文件,它包含了运行和编写单元测试所需的所有类和方法。 在JUnit 4.10中,有几个核心概念和特性: 1. **测试注解**:JUnit 4引入了注解(Annotation...
11. **Mockito集成**:JUnit 4.11通常与Mockito等模拟框架配合使用,允许创建和配置模拟对象以隔离被测试代码,确保测试的准确性和可重复性。 总的来说,`junit-4.11.jar` 提供了一个强大而灵活的平台,用于构建...
首先,JUnit4引入了注解(Annotation)的概念,使得测试类和测试方法的声明更加简洁。例如,`@Test`注解用于标记测试方法,`@Before`和`@After`用于在每个测试方法之前和之后执行初始化和清理工作。还有`@Ignore`...
2. 持续集成:JUnit的结果可以通过JUnit XML报告格式集成到持续集成服务器(如Jenkins、Travis CI)中,实现自动化构建和测试。 3. 集成测试:与Selenium WebDriver等工具配合,可以进行GUI层面的集成测试。 五、...
2. **创建测试类和测试方法**:介绍如何使用JUnit注解来创建测试类和测试方法,以及如何组织测试结构。 3. **断言和匹配器**:详细说明各种断言方法和Hamcrest匹配器的使用,以及它们在测试中的作用。 4. **测试执行...
JUnit4是目前广泛使用的版本,它引入了注解(Annotation)来简化测试代码,如@Test用于标记测试方法,@Before和@After用于定义在每个测试方法之前和之后执行的设置和清理操作。快速入门文档“JUnit4快速入门(已阅)....
除了基本的测试功能,JUnit还可以与其他库结合使用,例如Mockito用于模拟对象,Hamcrest或AssertJ提供更丰富的断言库,TestNG则提供了更复杂的测试配置和执行选项。 在压缩包中的`JuintDemo3`可能包含了使用JUnit...
首先,JUnit4引入了注解(Annotation)机制,这使得测试类和测试方法的声明变得更加简洁。例如,`@Test`注解用于标记测试方法,`@Before`和`@After`用于定义在每个测试方法之前和之后执行的设置和清理代码。此外,...
- **测试类和测试方法**:测试类通常包含多个测试方法,每个方法代表一个独立的测试用例。 - **注解**:如`@Test`用于标记测试方法,`@Before`和`@After`分别用于在每个测试方法前后的初始化和清理工作。 - **...
JUnit提供了注解(Annotation)、断言(Assertion)等工具,使得编写测试用例变得简单易懂。 **二、JUnit的核心概念** 1. **测试类与测试方法**:在JUnit中,我们通常创建一个公共类来包含所有测试用例,每个测试...
4. **注解(Annotation)**:JUnit 使用注解简化测试配置,如 `@Before` 用于在所有测试方法之前执行的代码,`@After` 用于在所有测试方法之后执行的代码,`@Test` 标记测试方法。 5. **测试套件(Test Suite)**:...
Junit作为Java编程语言中最广泛使用的单元测试框架,对于软件测试起到了至关重要的作用。本文将深入探讨软件测试的基本概念、Junit的使用方法及其在实际项目中的实践应用。 软件测试是验证和确认软件是否满足既定...
Junit4通过注解(Annotation)来简化测试用例的编写,例如`@Test`注解标记测试方法,`@Before`和`@After`注解分别表示在每个测试方法执行前后的准备工作和清理工作。Calculate类包含四个方法:add、subtract、...
JUnit是Java编程语言中最流行的单元测试框架,它提供了丰富的断言方法和测试注解,使得编写和执行单元测试变得简单易行。本篇文章将深入探讨JUnit4的单元测试实例,帮助你更好地理解和应用这个工具。 一、JUnit4...
JUnit是一个开源的Java库,它提供了注解(Annotation)和断言(Assertion)等工具,帮助我们定义和执行测试用例。例如,`@Test`注解标记的方法表示这是一个测试用例,`assertEquals()`用于验证预期结果与实际结果...
JUnit4的引入极大地简化了单元测试的编写过程,它引入了注解(Annotation)的概念,使得测试类和方法的声明更加简洁。例如,`@Test`注解标记在测试方法上,表明这是一个需要执行的测试用例。此外,还有像`@Before`和...
JUnit 4.12是Java编程语言中广泛使用的单元测试框架的一个版本,它极大地促进了软件开发过程中的测试驱动开发(TDD)和行为驱动开发(BDD)。此版本的JUnit在之前的基础上进行了优化和增强,提供了更多的功能和更好...
在书中,作者首先介绍了JUnit的基本概念,包括如何创建和运行简单的测试用例,以及如何利用注解(Annotation)来简化测试代码。JUnit的核心类库如`@Test`、`@Before`、`@After`等注解的使用方法被逐一讲解,让读者...
JUnit是Java平台上的一个开源测试框架,它提供了丰富的断言库用于比较预期结果与实际结果,以及注解(Annotation)来简化测试代码的编写。在JUnit中,测试类通常继承自`JUnit4`的`TestCase`类,或者在JUnit5中,使用...