添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

什么是Mock 测试

Mock 测试就是在测试过程中,对于某些 不容易构造 (如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者 不容易获取 的对象(如 JDBC 中的ResultSet 对象,JPA的CRUDRepository,需要执行数据库操作的),用一个虚拟的对象(Mock 对象)来创建(覆盖方法返回)以便测试的测试方法。

  • JUnit 是一个单元测试框架。
  • Mockito 是用于数据模拟对象的框架。

when().thenReturn();

when( mockRepository.getMock("x") ).thenReturn( "1024" );
String mock= mockRepository.getMock("x");
assertEquals( "预期x=1024","1024", mock);

when(xxxx).thenReturn(yyyy); 是指定当执行了这个方法的时候,返回 thenReturn 的值,相当于是对模拟对象的配置过程,为某些条件给定一个预期的返回值。

HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getParameter("csdn")).thenReturn("zhengkai");
assertEquals( "预期csdn=zhengkai",request.getParameter("csdn"), "zhengkai");

Stub 打桩

Mockito 中 when().thenReturn(); 这种语法来定义对象方法和参数(输入),然后在 thenReturn 中指定结果(输出)。此过程称为 Stub 打桩 。一旦这个方法被 stub 了,就会一直返回这个 stub 的值。

!!!Stub 打桩 需要注意的是:

  • 对于 static 和 final 方法, Mockito 无法对其 when(…).thenReturn(…) 操作。
  • 当我们连续两次为同一个方法使用 stub 的时候,他只会只用最新的一次。

打桩支持迭代风格的返回值,第一次调用 i.next() 将返回 ”Hello”,第二次的调用会返回 ”World”。

// 第一种方式 ,都是等价的
when(i.next()).thenReturn("Hello").thenReturn("World");
// 第二种方式,都是等价的
when(i.next()).thenReturn("Hello", "World");
// 第三种方式,都是等价的
when(i.next()).thenReturn("Hello"); when(i.next()).thenReturn("World");

void如何打桩

没有返回值的 void 方法呢?不需要执行,只需要模拟跳过,写法上会有所不同,没返回值了调用 thenReturn(xxx) 肯定不行,取而代之的用 doNothing().when().notify();

doNothing().when(obj).notify();
// 或直接
when(obj).notify();
when(i.next()).thenThrow(new RuntimeException());
doThrow(new RuntimeException()).when(i).remove(); // void 方法的
// 迭代风格 
doNothing().doThrow(new RuntimeException()).when(i).remove(); 
// 第一次调用 remove 方法什么都不做,第二次调用抛出 RuntimeException 异常。

Any()

anyString() 匹配任何 String 参数,anyInt() 匹配任何 int 参数,anySet() 匹配任何 Set,any() 则意味着参数为任意值 any(User.class) 匹配任何 User类。

when(mockedList.get(anyInt())).thenReturn("element");   
System.out.println(mockedList.get(999));// 此时打印是 element
System.out.println(mockedList.get(777));// 此时打印是 element
                    什么是Mock 测试Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的对象(如 JDBC 中的ResultSet 对象,JPA的CRUDRepository,需要执行数据库操作的),用一个虚拟的对象(Mock 对象)来创建(覆盖方法返回)以便测试的测试方法。JUnit 是一个单元测试框架。...
				
内容概要:参考Mockito官方API文档,实践框架每个特性。 适合人群:Mockito入门人员以及想全面熟悉Mockito特性的人员,做到了开箱即用。 能学到什么:“Mockito 4.6.0 + Junit 5”的组合编程。 使用建议:使用前安装好Maven及Java即可,推荐使用VSCode编辑。
PowerMockito.doReturn().when()与Mockito.when().thenReturn()的区别 1.当使用PowerMockito.doReturn(null).when(handler, "getFareRules", Integer.valueOf(requestDTO.getFareId()), "GB");时 handler的getFareRules方法
下面代码块里这一段里就是说去调用bandwidthAllocationRuleService.listBandwidthAllocationRule方法的时候直接引用我定义好的ipage,但是我这么写,图一的那个allocationRecords一直是个空,我就很纳闷。然后我排查是什么原因,网上看到一篇博文说是因为对象引用的地址不一致或者参数不一致导致的,但是看着有点懵,有兴趣的可以看一下 https://blog.csdn.net/besto229/article/details/106077901/
平时写单测时,对于一些有限制或因当前环境无法访问的接口时,需要用到Mock来为目标接口添加自定义的实现,使其表现出我们希望表现的逻辑,从而不影响单元测试的实现。Mockito是常用的一个类库,使用也比较简单。使用分为注解的方式和直接创建对象的方式。 注解的方式 // 被注入的目标对象 @InjectMocks private AimService aimService; // 创建一个MockedService的一个mock对象 @Mock private MockedService mockedSer
1.@RunWith()+@Mock注解实现 @RunWith(MockitoJUnitRunner.class) public class AccountServiceRunwithTest { @Mock private AccountService accountService; 2. @Befor+Mockito.mock private AccountService accountService; private List<Integer
什么是Mock 测试 Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的对象(如 JDBC 中的ResultSet 对象,JPA的CRUDRepository,需要执行数据库操作的),用一个虚拟的对象(Mock 对象)来创建(覆盖方法返回)以便测试的测试方法。 JUnit是一个单元测试框架。 Mockito是用于数据模拟对象的框架。 when().thenReturn(); when( m..
        在单元测试中,有时候会用到Mockito中的when(...).thenReturn(...)设置方法的返回值,但是有的时候when条件中返回的值,和thenReturn中返回的值的类型不一样,这时会出现Cannot resolve method 'thenReturn()'错误。         这时可以使用以下两种方法解决:   1、直接在thenReturn中强制转化成相...
在这个例子中,我们使用 Mockito 创建了一个 `List` 类型的 mock 对象,并且调用了 `add` 和 `clear` 方法。最后,我们使用 `verify` 方法验证了 mock 对象的行为。 除了 `verify` 方法之外,Mockito 还提供了许多其他方法,例如 `when` 方法,它可以使 mock 对象返回指定的值。以下是一个使用 `when` 方法的示例: ```java import static org.mockito.Mockito.*; import java.util.List; import org.junit.Test; public class MyTest { @Test public void test() { // 创建一个 mock 对象 List<String> mockedList = mock(List.class); // 使用 when 方法指定 mock 对象的行为 when(mockedList.get(0)).thenReturn("first"); // 验证 mock 对象的行为 System.out.println(mockedList.get(0)); // 输出 "first" System.out.println(mockedList.get(1)); // 输出 null 在这个例子中,我们使用 `when` 方法指定了当调用 `get(0)` 方法时,mock 对象应该返回 `"first"`。然后,我们验证了 mock 对象的行为,并且输出了调用 `get(0)` 和 `get(1)` 方法时的返回值。 总的来说,Mockito 是一个非常强大的测试框架,它可以帮助开发者轻松地创建和管理 mock 对象,并且验证代码的行为。
vue: 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统上`禁止运行脚本`。(powershell运行策略设置) Moshow郑锴: 棒棒👍🏻 vue: 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统上`禁止运行脚本`。(powershell运行策略设置) q1054261752: 大佬写的真好,解决了问题,可以用,行 JAVA使用POI-TL通过Word模板生成Word文件 Moshow郑锴: 你好,需要检测一下是否是权限的问题,系统账号或者运行java的service account需要拥有目标目录的读写权限 Qlik Sense Desktop 下载和安装 Moshow郑锴: 其实BI语言都很类似的,Qlik偏向于内存型或者内存优化型的,执行起来快。UI方便,还有更丰富的加载处理script。 Qlik Sense Desktop 下载和安装 sugary_sweat: 感觉和tabuleau差不多