首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

看,Mockito如何搞定Builder模式的Fluent API

return builder.setName("name").setAddress("address").sayHello(); } } 建造者模式引人注目的是它标志性的链式方法调用...image.png 失败的症状是抛出了空指针异常,根本原因是没有正确的测试桩可供使用,因为调用sayHello时,mock的builder没有被成功匹配。 看来得根据代码依次来进行打桩。...image.png 不过问题来了,为了能匹配测试桩,需要逐个对链式调用中的各个中间返回对象进行打桩。如果只是像这个案例的话,也就算了,如果碰到更为复杂的链式方法调用,打桩的代码就会一大片。...还好Mockito从2.0开始为这个问题提供了一个优雅的解决方法。...()).isEqualTo("hi"); } } 通过 @Mock(answer = RETURNS_SELF) ,告诉Mockito来返回被mock的测试桩自身,这样就能支持链式方法调用了。

98010

Mockito模拟进行单元测试

(0),所以会抛出越界异常 //when(spy.get(0)).thenReturn(3); //使用doReturn-when可以避免when-thenReturn调用真实对象api...(0); when(mockList.get(0)).thenReturn(1); when(mockList.get(0)).thenReturn(2); when(mockList.get...- 当调用其get方法获取第0个元素时,返回"first" Mockito.when(mockedList.get(0)).thenReturn("first"); Mock对象的时候,创建一个proxy...对象,保存被调用方法名(get),以及调用时候传递的参数(0),然后调用thenReturn方法时再把“first”保存起来,这样,就有了构建一个stub方法所需的所有信息,构建一个stub。...当get方法调用的时候,实际上调用的是之前保存的proxy对象的get方法,返回之前保存的数据。

9.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Android开发之逻辑单元测试

).when(syncInformHandler, "canDoSync", Mockito.anyLong(), Mockito.anyLong()); mock类中的静态方法 PowerMockito.mockStatic...).when(ManagerFactory.getInstance()); 以上的代码就显示出doReturn和thenReturn的区别了,thenReturn之前的when里的参数是可以调用响应方法的...异常,因为thenReturn调用真实的方法执行,而doReturn不会,只会执行stubbed(插桩)方法 mock类中private变量 IMInternal imInternal = PowerMockito.mock...,验证方法调用的次数;有时候一个方法并没有返回值,所以没办法通过判断返回值的方式来验证结果是否是我们锁预期的,因此可通过检测方法中某一个方法是否被调用过,被调用的次数来检测是否符合我们的预期: 验证...,而且包名是一样的,这样单元测试用例类中就能直接访问protected方法了 单元测试的编写也可以有“模块测试”与“集成测试”的概念,比如说一个方法里面执行了6个方法,我们可分别验证这6个方法的正确性

1.3K10

Mockito模拟进行单元测试

(0),所以会抛出越界异常 //when(spy.get(0)).thenReturn(3); //使用doReturn-when可以避免when-thenReturn调用真实对象api...(0); when(mockList.get(0)).thenReturn(1); when(mockList.get(0)).thenReturn(2); when(mockList.get...- 当调用其get方法获取第0个元素时,返回"first" Mockito.when(mockedList.get(0)).thenReturn("first"); Mock对象的时候,创建一个proxy...对象,保存被调用方法名(get),以及调用时候传递的参数(0),然后调用thenReturn方法时再把“first”保存起来,这样,就有了构建一个stub方法所需的所有信息,构建一个stub。...当get方法调用的时候,实际上调用的是之前保存的proxy对象的get方法,返回之前保存的数据。

6.8K20

多线程构建场景下Powermockito无法不同类中Mock同一个静态方法

修改单元测试的过程中,不幸踩了个坑,发现 Powermockito 的PowerMock.mockStatic(ClassThatContainsStaticMethod.class) 多线程场景下是无法正常工作的...发生问题的场景是这样的 Class C 有一个静态方法,Class A 和 Class B 都需要调用这个方法完成一些功能: Class C{truepublic static SomeObject getSomeObject...由于测试中直接调用 C.getSomeObject() 会导致一些不可预期的错误,所以我想对AB类进行测试就必须使用Mock,于是我那么写: Class ATest{true@Beforetruepublic...void setUp(){truetruePowerMock.mockStatic(C.class)truetruePowerMock.when(C.C.getSomeObject()).thenReturn...(C.C.getSomeObject()).thenReturn(PowerMock.mock(SomeObject.class))true}} 当我IDE中分别运行 ATest 或者 BTest

5.5K30

Java单元测试框架之Mockito指南

; 对于 static 和 final 方法Mockito 无法对其 when (…).thenReturn (…) 操作。...*;final ArrayList mockList = mock(ArrayList.class);// 设置方法调用返回值when(mockList.add("test2")).thenReturn...建议使用方法层面的验证,如:never();// 验证是否有冗余调用的时候,可使用此种方式。...spy中,由于默认是调用真实方法,所以第二种写法不等价于第一种写法,不推荐这种写法。...(可代替参数匹配器使用) 某些场景中,不光要对方法的返回值和调用进行验证,同时需要验证一系列交互后所传入方法的参数。那么我们可以用参数捕获器来捕获传入方法的参数进行验证,看它是否符合我们的要求。

30310

博文精选|Mockito使用指南

本文对mock框架mockito介绍得比较详细具体,值得参考。 mock和Mockito的关系 软件开发中提及”mock”,通常理解为模拟对象。 为什么需要模拟?...它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常 PowerMock:这个工具是EasyMock...mockito在这里扮演了一个为我们模拟DAO对象,并且帮助我们验证行为(比如验证是否调用了getPerson方法及update方法)的角色 Android Studio工程配置Mockito Android...when(spy.size()).thenReturn(100); //调用"真正"的方法 spy.add("one"); spy.add("two");...(spy.get(10)).thenReturn("foo"); //可用以下方式 doReturn("foo").when(spy).get(10); } 为未stub的方法设置默认返回值

4K30

Mockito和PowerMock用法

单元测试中,我们往往想去独立地去测一个类中的某个方法,但是这个类可不是独立的,它会去调用一些其它类的方法和service,这也就导致了以下两个问题:外部服务可能无法单元测试的环境中正常工作,因为它们可能需要访问数据库或者使用一些其它的外部系统...一、mock测试和Mock对象 mock对象就是调试期间用来作为真实对象的替代品 mock测试就是测试过程中,对那些不容易构建的对象用一个虚拟对象来代替测试的方法就叫mock测试 二、Mockito...); when(request.getParameter("foo")).thenReturn("boo"); // 注意:mock()是Mockito的静态方法,可以用@mock注解替换 private...()).thenReturn("xiaohong"); // 3、mockito模拟测试无返回值的方法 Person person =mock(Person.class); doNothing().when...起语法规则与Mockito一致,主要区别在于使用方面,以实现完成对private/static/final等方法(也支持mock的对象是方法内部new出来的)的Mock(模拟)。

2.8K32

SpringBoot - 单元测试利器Mockito入门

而当我们引入 Mock 测试时,就可以创建一个假的对象,替换掉真实的 Bean B 和 C,这样调用B、C的方法时,实际上就会去调用这个假的 Mock 对象的方法,而我们就可以自己设定这个 Mock...Mockito.when( 对象.方法名() ).thenReturn( 自定义结果 ) 代码如下: @RunWith(SpringRunner.class) @SpringBootTest publicclass...除了最基本的 Mockito.when( 对象.方法名() ).thenReturn( 自定义结果 ),还提供了其他用法让我们使用。...Mockito.when(userService.getUserById(Mockito.anyInt())).thenReturn(new User(3, "Aritisan")); User user1...注意事项 上述就是 Mockito 的 Mock 对象使用方法,不过当使用 Mockito Mock 对象时,有一些限制需要遵守: 不能 Mock 静态方法 不能 Mock private 方法

14.2K42

使用强大的 Mockito 来测试你的代码

stub 类是依赖类的部分方法实现,而这些方法在你测试类和接口的时候会被用到,也就是说 stub 类测试中会被实例化。stub 类会回应任何外部测试的调用。...模拟 databaseMock 实例 2、Mockito 通过 @mock 注解创建 mock 对象 3、使用已经创建的mock初始化这个类 4、测试环境下,执行测试类中的代码 5、使用断言确保调用方法返回值为...when(….).thenReturn(….)可以被用来定义当条件满足时函数的返回值,如果你需要定义多个返回值,可以多次定义。...when(test.getUniqueId()).thenReturn(43); // 测试中使用mock对象 assertEquals(test.getUniqueId...(0); // 下面代码不生效 // 真正的方法会被调用 // 将会抛出 IndexOutOfBoundsException 的异常,因为 List 为空 when(spy.get(0)).thenReturn

10.4K60

JAVA实战:如何让单元测试覆盖率达到80%甚至以上

(几乎不会使用)Mockito.when( 对象.方法名() ).thenReturn( 自定义结果 ):后面自定返回结果,需要和方法返回结果类型一致,Mockito.any():用于匹配任意类型的参数详细版...@Mock所谓的mock就是创建一个类的虚假的对象,测试环境中,用来替换掉真实的对象,以达到两大目的:验证这个对象的某些方法调用情况,调用了多少次,参数是什么等等指定这个对象的某些方法的行为,返回特定的值...具体来说,Mockito.when()方法接受两个参数,一个是模拟对象的方法调用,另一个是指定的行为或返回值。当模拟对象的方法调用时,Mockito就会按照when()方法中指定的方式进行处理。...例如,可以使用Mockito.when()方法来模拟一个方法的返回值.需要注意的是,Mockito.when()方法并不会真正地执行方法,而是返回了一个指定的返回值或设定的行为,用于测试中进行验证。...具体来说,Mockito.any()方法可以用于模拟对象的方法调用或验证方法调用时的参数匹配。需要注意的是,当使用Mockito.any()方法时,需要确保模拟方法的返回值与模拟方法的参数类型兼容。

3K20

Java单元测试Mock工具Mockito介绍

1、测试环境中构建一些依赖的成本比较高 如一些硬件的操作,像串口和USB输入; 还有一些第三方依赖,像支付系统要调用很多外部支付网关,如果直接调用生产环境的网关就会产生脏数据的问题;...>3.7.7 test 2、模拟对象 具体的方式有2种:调用spy方法,或加Spy注解; 先讲下我们的范例代码,假设我们有个简单的...MockitoAnnotations.openMocks,不然会报错; 可以看到上面拦截方法调用的语法是Mockito.when(..).thenReturn when方法thenReturn传递要返回的结果...,如果when要带参数,一般是这样的格式, Mockito.anyInt(),Mockito定义了很多常用类型,可以根据自己需要选择; 3、模拟静态方法 如果要用Mockito模拟静态方法,一是要保证...(LocalDate.class)) { theMock.when(LocalDate::now).thenReturn(dummy); LocalDate now =

3.1K40

SpringBoot 单元测试利器-Mockito

mock 测试就是测试过程中,创建一个假的对象,避免你为了测试一个方法,却要自行构建整个 bean 的依赖链 像是以下这张图,类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如...而当我们引入 mock 测试时,就可以创建一个假的对象,替换掉真实的 bean B 和 C,这样调用B、C的方法时,实际上就会去调用这个假的 mock 对象的方法,而我们就可以自己设定这个 mock...userDao 自定义方法的返回值,这里有一个公式用法,下面这段代码的意思为,当调用了某个 mock 对象的方法时,就回传我们想要的自定义结果 Mockito.when( 对象.方法名() ).thenReturn...除了最基本的 Mockito.when( 对象.方法名() ).thenReturn( 自定义结果 ),还提供了其他用法让我们使用 thenReturn 系列方法 当使用任何整数值调用 userService...Mockito 的限制 上述就是 Mockito 的 mock 对象使用方法,不过当使用 Mockito mock 对象时,有一些限制需要遵守 不能 mock 静态方法 不能 mock private

2.5K10
领券