`
jilen
  • 浏览: 96576 次
  • 性别: 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);
}

相关推荐

    mockito-junit-jupiter-3.3.3.jar

    mockito-junit-jupiter-3.3.3.jarmockito-junit-jupiter-3.3.3.jar

    mockito-junit-jupiter-3.6.0.jar

    mockito-junit-jupiter-3.6.0.jarmockito-junit-jupiter-3.6.0.jar

    powermock-api-mockito2-2.0.9-API文档-中英对照版.zip

    赠送jar包:powermock-api-mockito2-2.0.9.jar; 赠送原API文档:powermock-api-mockito2-2.0.9-javadoc...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    mockito-core-4.0.0-API文档-中文版.zip

    赠送jar包:mockito-core-4.0.0.jar; 赠送原API文档:mockito-core-4.0.0-javadoc.jar; 赠送源代码:mockito-core-4.0.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-4.0.0.pom; 包含翻译后的API文档:...

    mockito-core-3.8.0-API文档-中英对照版.zip

    赠送jar包:mockito-core-3.8.0.jar; 赠送原API文档:mockito-core-3.8.0-javadoc.jar; 赠送源代码:mockito-core-3.8.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.8.0.pom; 包含翻译后的API文档:...

    mockito-core-4.0.0-API文档-中英对照版.zip

    赠送jar包:mockito-core-4.0.0.jar; 赠送原API文档:mockito-core-4.0.0-javadoc.jar; 赠送源代码:mockito-core-4.0.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-4.0.0.pom; 包含翻译后的API文档:...

    mockito-junit-jupiter-3.1.0.jar

    java运行依赖jar包

    mockito-jar.zip

    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-core-3.9.0-API文档-中文版.zip

    赠送jar包:mockito-core-3.9.0.jar; 赠送原API文档:mockito-core-3.9.0-javadoc.jar; 赠送源代码:mockito-core-3.9.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.9.0.pom; 包含翻译后的API文档:...

    mockito-core-2.15.0-API文档-中英对照版.zip

    赠送jar包:mockito-core-2.15.0.jar; 赠送原API文档:mockito-core-2.15.0-javadoc.jar; 赠送源代码:mockito-core-2.15.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-2.15.0.pom; 包含翻译后的API文档...

    mockito-core-2.15.0-API文档-中文版.zip

    赠送jar包:mockito-core-2.15.0.jar; 赠送原API文档:mockito-core-2.15.0-javadoc.jar; 赠送源代码:mockito-core-2.15.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-2.15.0.pom; 包含翻译后的API文档...

    mockito-core-3.8.0-API文档-中文版.zip

    赠送jar包:mockito-core-3.8.0.jar; 赠送原API文档:mockito-core-3.8.0-javadoc.jar; 赠送源代码:mockito-core-3.8.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.8.0.pom; 包含翻译后的API文档:...

    mockito-core-3.1.0-API文档-中英对照版.zip

    赠送jar包:mockito-core-3.1.0.jar; 赠送原API文档:mockito-core-3.1.0-javadoc.jar; 赠送源代码:mockito-core-3.1.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.1.0.pom; 包含翻译后的API文档:...

    mockito-all-1.8.0-rc2.jar

    mockito-all-1.8.0-rc2

    powermock-mockito-junit-1.6.3.zip 当前最新版

    powermock-mockito-junit-1.6.3.zip 当前最新版,请使用1.6以上版本jdk。 如果抛出 Bad version in .class file,请检查jdk版本是否太低

    mockito-core-3.1.0-API文档-中文版.zip

    赠送jar包:mockito-core-3.1.0.jar; 赠送原API文档:mockito-core-3.1.0-javadoc.jar; 赠送源代码:mockito-core-3.1.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.1.0.pom; 包含翻译后的API文档:...

    Java-Junit-Mockito

    Green Bar和assertEquals步骤04:重构您的第一个JUnit测试步骤05:第二个JUnit示例assertTrue和assertFalse步骤06:@Before @After步骤07:@BeforeClass @AfterClass步骤08:比较JUnit测试中的数组步骤09:测试...

    PowerMock+Mockito-junit测试套件1.6.3版本

    PowerMock+Mockito-junit测试套件1.6.3版本

    Mockito+Junit5测试方法实践

    内容概要:参考Mockito官方API文档,实践框架每个特性。 适合人群:Mockito入门人员以及想全面...能学到什么:“Mockito 4.6.0 + Junit 5”的组合编程。 使用建议:使用前安装好Maven及Java即可,推荐使用VSCode编辑。

Global site tag (gtag.js) - Google Analytics