`
jilen
  • 浏览: 98633 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用Mockito的Annotation简化测试 -- 使用Mockito和JUnit【二】

    博客分类:
  • java
 
阅读更多

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,这样才会处理各种注解。

嫌啰嗦?可用创建一个基类标注上该注解,然后继承它

分享到:
评论
2 楼 jilen 2012-10-09  
xing_kenny 写道
需要增加

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}

@Runwith(MockitoJunitRunner.class)
1 楼 xing_kenny 2012-07-09  
需要增加

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}

相关推荐

    Junit4.12+mockito

    在这个压缩包中,包含的是两个关键工具:JUnit 4.12 和 Mockito,它们是Java开发中广泛使用的单元测试框架。 **JUnit** 是一个开源的Java单元测试框架,它的版本4.12提供了许多增强的功能,包括注解(Annotation)...

    junit-4.10.jar,junit集合

    这里我们关注的是`junit-4.10.jar`,这是一个JUnit 4.10版本的库文件,它包含了运行和编写单元测试所需的所有类和方法。 在JUnit 4.10中,有几个核心概念和特性: 1. **测试注解**:JUnit 4引入了注解(Annotation...

    junit-4.11.jar包

    11. **Mockito集成**:JUnit 4.11通常与Mockito等模拟框架配合使用,允许创建和配置模拟对象以隔离被测试代码,确保测试的准确性和可重复性。 总的来说,`junit-4.11.jar` 提供了一个强大而灵活的平台,用于构建...

    junit4测试源码

    首先,JUnit4引入了注解(Annotation)的概念,使得测试类和测试方法的声明更加简洁。例如,`@Test`注解用于标记测试方法,`@Before`和`@After`用于在每个测试方法之前和之后执行初始化和清理工作。还有`@Ignore`...

    JUnit-Tutorial.zip_JUnit_zip

    2. 持续集成:JUnit的结果可以通过JUnit XML报告格式集成到持续集成服务器(如Jenkins、Travis CI)中,实现自动化构建和测试。 3. 集成测试:与Selenium WebDriver等工具配合,可以进行GUI层面的集成测试。 五、...

    JUnit单元测试.zip

    2. **创建测试类和测试方法**:介绍如何使用JUnit注解来创建测试类和测试方法,以及如何组织测试结构。 3. **断言和匹配器**:详细说明各种断言方法和Hamcrest匹配器的使用,以及它们在测试中的作用。 4. **测试执行...

    使用junit测试ssh中的dao

    JUnit4是目前广泛使用的版本,它引入了注解(Annotation)来简化测试代码,如@Test用于标记测试方法,@Before和@After用于定义在每个测试方法之前和之后执行的设置和清理操作。快速入门文档“JUnit4快速入门(已阅)....

    junit测试源代码

    除了基本的测试功能,JUnit还可以与其他库结合使用,例如Mockito用于模拟对象,Hamcrest或AssertJ提供更丰富的断言库,TestNG则提供了更复杂的测试配置和执行选项。 在压缩包中的`JuintDemo3`可能包含了使用JUnit...

    junit4测试工具

    首先,JUnit4引入了注解(Annotation)机制,这使得测试类和测试方法的声明变得更加简洁。例如,`@Test`注解用于标记测试方法,`@Before`和`@After`用于定义在每个测试方法之前和之后执行的设置和清理代码。此外,...

    软件测试JUnit上机

    - **测试类和测试方法**:测试类通常包含多个测试方法,每个方法代表一个独立的测试用例。 - **注解**:如`@Test`用于标记测试方法,`@Before`和`@After`分别用于在每个测试方法前后的初始化和清理工作。 - **...

    junit测试工具以及安装方法

    JUnit提供了注解(Annotation)、断言(Assertion)等工具,使得编写测试用例变得简单易懂。 **二、JUnit的核心概念** 1. **测试类与测试方法**:在JUnit中,我们通常创建一个公共类来包含所有测试用例,每个测试...

    junit测试

    4. **注解(Annotation)**:JUnit 使用注解简化测试配置,如 `@Before` 用于在所有测试方法之前执行的代码,`@After` 用于在所有测试方法之后执行的代码,`@Test` 标记测试方法。 5. **测试套件(Test Suite)**:...

    软件测试与Junit实践__0

    Junit作为Java编程语言中最广泛使用的单元测试框架,对于软件测试起到了至关重要的作用。本文将深入探讨软件测试的基本概念、Junit的使用方法及其在实际项目中的实践应用。 软件测试是验证和确认软件是否满足既定...

    Junit4单元测试入门例子

    Junit4通过注解(Annotation)来简化测试用例的编写,例如`@Test`注解标记测试方法,`@Before`和`@After`注解分别表示在每个测试方法执行前后的准备工作和清理工作。Calculate类包含四个方法:add、subtract、...

    junit4单元测试实例

    JUnit是Java编程语言中最流行的单元测试框架,它提供了丰富的断言方法和测试注解,使得编写和执行单元测试变得简单易行。本篇文章将深入探讨JUnit4的单元测试实例,帮助你更好地理解和应用这个工具。 一、JUnit4...

    教会你如何使用junit,以及myeclipse+junit 使用

    JUnit是一个开源的Java库,它提供了注解(Annotation)和断言(Assertion)等工具,帮助我们定义和执行测试用例。例如,`@Test`注解标记的方法表示这是一个测试用例,`assertEquals()`用于验证预期结果与实际结果...

    junit4 jar包 Java单元测试框架绿色免费版.zip

    JUnit4的引入极大地简化了单元测试的编写过程,它引入了注解(Annotation)的概念,使得测试类和方法的声明更加简洁。例如,`@Test`注解标记在测试方法上,表明这是一个需要执行的测试用例。此外,还有像`@Before`和...

    junit-4.12

    JUnit 4.12是Java编程语言中广泛使用的单元测试框架的一个版本,它极大地促进了软件开发过程中的测试驱动开发(TDD)和行为驱动开发(BDD)。此版本的JUnit在之前的基础上进行了优化和增强,提供了更多的功能和更好...

    JUnit in Action(JUnit经典书籍)中文+英文

    在书中,作者首先介绍了JUnit的基本概念,包括如何创建和运行简单的测试用例,以及如何利用注解(Annotation)来简化测试代码。JUnit的核心类库如`@Test`、`@Before`、`@After`等注解的使用方法被逐一讲解,让读者...

    测试+JUnit+单元测试+学习

    JUnit是Java平台上的一个开源测试框架,它提供了丰富的断言库用于比较预期结果与实际结果,以及注解(Annotation)来简化测试代码的编写。在JUnit中,测试类通常继承自`JUnit4`的`TestCase`类,或者在JUnit5中,使用...

Global site tag (gtag.js) - Google Analytics