今天,我被要求使用RESTful服务,所以我开始遵循Robert Cecil Martin的TDD规则实施该服务,并遇到了一种测试预期异常以及错误消息的新方法(对我来说至少是这样),因此考虑共享我的实现方式作为这篇文章的一部分。

首先,让我们编写一个@Test并指定规则,我们的代码将为我们的示例抛出特定的异常,即EmployeeServiceException ,我们将使用ExpectedException对其进行验证,这将为我们提供有关预期抛出的异常的更精确信息,并具有验证的能力错误消息,如下所示:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStaticMethod.class)
public class EmployeeServiceImplTest {@InjectMocksprivate EmployeeServiceImpl employeeServiceImpl;@Rulepublic ExpectedException expectedException = ExpectedException.none();@Beforepublic void setupMock() {MockitoAnnotations.initMocks(this);}@Testpublic void addEmployeeForNull() throws EmployeeServiceException {expectedException.expect(EmployeeServiceException.class);expectedException.expectMessage("Invalid Request");employeeServiceImpl.addEmployee(null);}}

现在,我们将为@Test创建一个实现类,该类将在请求为null时抛出EmployeeServiceException ,对我来说,它是EmployeeServiceImpl ,如下所示:

EmployeeServiceImpl.java

public class EmployeeServiceImpl implements IEmployeeService {@Overridepublic String addEmployee(final Request request)throws EmployeeServiceException {if (request == null) {throw new EmployeeServiceException("Invalid Request");}return null;}
}

下一步,我们将写一个@Test,我们将使用嘲笑其接受输入参数,返回类型的静态方法PowerMockito.mockStatic() ,验证它使用PowerMockito.verifyStatic(),最后做一个断言来记录测试通过或失败状态,如下:

@Testpublic void addEmployee() throws EmployeeServiceException {PowerMockito.mockStatic(ClassWithStaticMethod.class);PowerMockito.when(ClassWithStaticMethod.getDetails(anyString())).thenAnswer(new Answer<String>() {@Overridepublic String answer(InvocationOnMock invocation)throws Throwable {Object[] args = invocation.getArguments();return (String) args[0];}});final String response = employeeServiceImpl.addEmployee(new Request("Arpit"));PowerMockito.verifyStatic();assertThat(response, is("Arpit"));}

现在,我们将在EmployeeServiceImpl自身中提供@Test的实现。 为此,让我们修改EmployeeServiceImpl使其具有静态方法调用,作为addEmployee的else语句的一部分 ,如下所示:

public class EmployeeServiceImpl implements IEmployeeService {@Overridepublic String addEmployee(final Request request)throws EmployeeServiceException {if (request == null) {throw new EmployeeServiceException("Invalid Request");} else {return ClassWithStaticMethod.getDetails(request.getName());}}
}

其中getDetailsClassWithStaticMethod内部的静态方法:

public class ClassWithStaticMethod {public static String getDetails(String name) {return name;}
}

完整的源代码托管在github上 。

翻译自: https://www.javacodegeeks.com/2017/01/expected-exception-rule-mocking-static-methods-junit.html

预期的异常规则和模拟静态方法– JUnit相关推荐

  1. junit 静态方法_预期异常规则和模拟静态方法– JUnit

    junit 静态方法 今天,我被要求使用RESTful服务,所以我按照Robert Cecil Martin的TDD规则开始实施它,并遇到了一种测试预期异常以及错误消息的新方法(对我来说至少是这样), ...

  2. junit 测试 异常_使用JUnit规则测试预期的异常

    junit 测试 异常 这篇文章展示了如何使用JUnit测试预期的异常. 让我们从我们要测试的以下类开始: public class Person {private final String name ...

  3. 使用JUnit规则测试预期的异常

    这篇文章展示了如何使用JUnit测试预期的异常. 让我们从我们要测试的以下类开始: public class Person {private final String name;private fin ...

  4. 在JUnit中测试预期的异常

    单元测试用于验证一段代码是否按照开发人员的预期运行. 有时,这意味着检查代码是否也会引发预期的异常. JUnit是Java单元测试的标准,并提供了几种验证抛出异常的机制. 本文探讨了这些选项及其相对优 ...

  5. junit5_在JUnit中测试预期的异常

    junit5 单元测试用于验证一段代码是否按照开发人员的预期运行. 有时,这意味着检查代码是否也会引发预期的异常. JUnit是Java单元测试的标准,并提供了几种验证抛出异常的机制. 本文探讨了这些 ...

  6. junit测试起名字规则_如何在JUnit 5中替换规则

    junit测试起名字规则 最近发布的JUnit 5(又名JUnit Lambda) alpha发行版引起了我的兴趣,在浏览文档时,我注意到规则以及运行程序和类规则都消失了. 根据文档,这些部分竞争的概 ...

  7. 使用PowerMock模拟静态方法

    在最近的博客中,我试图强调使用依赖注入的好处,并表达一种想法,即这种技术的主要好处之一是,通过在类之间提供高度的隔离,它可以使您更轻松地测试代码,并且得出的结论是,许多好的测试等于好的代码. 但是,当 ...

  8. mockito 静态方法_Mockito模拟静态方法– PowerMock

    mockito 静态方法 Mockito allows us to create mock objects. Since static method belongs to the class, the ...

  9. 静态路由_在Android中模拟静态方法:让我们总结一下

    静态路由 在Android中编写本地单元测试时,面临的局限性之一是测试是针对没有任何代码的android.jar版本运行的. 如文档所述,必须模拟对Android代码的任何依赖关系. 一个简单的单元测 ...

最新文章

  1. 吴恩达第三周逻辑回归
  2. 理解python并发编程_Python并发编程很简单
  3. nodejs 30行代码 爬豆瓣电影数据
  4. WiFi---AP+STA共存模式(ESP8266)
  5. shell命令locate
  6. [HTML] 关于DIV被Flash或表单遮盖的解决方法
  7. H5_0020:判断安卓苹果平台
  8. 基于麻雀算法优化的相关向量机RVM分类算法
  9. 使用Java Api 操作HDFS
  10. C#,数据库,会员积分管理系统
  11. P4234-最小差值生成树【LCT】
  12. 首先提出电子计算机存储程序的科学家,1、世界上首先实现存储程序的电子数字计算机是___C_。.doc...
  13. 哈工大计算机网络Mooc 第八章笔记(网络层(中))
  14. 火山快手伪原创视频热门
  15. 世界杯海信再出圈,三星:“谈不上愉悦”
  16. web页面-电子签名
  17. 你的团队需要一个会讲故事的人
  18. 车载诊断数据库ODX——ODX参数解析类型(上)
  19. 黑龙江移动新魔百盒M411A_2+8_S905L3A_线刷固件包
  20. 无法用“Point*”类型的值初始化“Point ”类型的引用(非常量限定)

热门文章

  1. 性能优化之抛弃Calendar
  2. 使用org.apache.commons.io.FileUtils,IOUtils工具类操作文件
  3. 关于区块链技术的10本书
  4. 2016蓝桥杯省赛---java---C---10(密码脱落)
  5. 179. 最大数---LeetCode---JAVA
  6. JAVA基础学习大全(笔记)
  7. springboot创建项目 编写dao serviece 和controller 持久层用mybatis
  8. 转: 虚拟IP(VIP)原理
  9. think-in-java(17)容器深入研究
  10. java设计模式 订阅模式_Java中的复合设计模式