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

#Android单元测试学习总结「建议收藏」

PowerMock使用一个自定义类加载器和字节码操作来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等。...,测试静态方法之前需要调用PowerMockito.mockStatic()方法来mock静态类,然后就通过when().thenReturn()方法指定静态方法模拟返回值即可。...(Utils.class); Utils.getUUId(); } 静态方法通过PowerMockito.verifyStatic(Class c)进行验证,不过这里跟Mocktio有一点区别的是需要在这个方法的后面再调用一次静态方法...同样在PowerMockito.verifyStatic方法后面要调用一次要验证的静态方法,总感觉这里很奇怪。。。 6....使用真实返回值 如果在测试的过程中又遇到不需要mock出来的静态方法模拟返回值,而是需要真实的返回值,怎么办呢,其实跟Mockito一样,PowerMockito同样提供thenCallRealMethod

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

详解Android单元测试最佳实践

App运行效果 依赖库 依赖库 作用 JUnit-4.12 基础得单元测试框架 Robolectric-3.8 Android SDK测试框架 PowerMock-1.6.6 模拟被测对象依赖的静态方法...UI依赖于Persenter,在Activity中通过静态工厂方法创建依赖的Presenter实例,需要使用PowerMock来模拟创建Presenter过程,完成Presenter模拟对象的注入 配置...通过@RunWith指定使用RobolectricTestRunner 通过@Config配置Robolectric的运行环境 通过@PrepareForTest配置PowerMock需要模拟静态类型...Presenter Presenter的测试一般可以不用依赖Android SDK了,Presenter依赖于底层的领域服务,也依赖上层View,demo中对领域服务的依赖没有通过构造函数的方式注入,而是通过静态工厂方法构建...,还是需要用到PowerMock 配置 通过@RunWith指定使用PowerMockRunner 通过@PrepareForTest配置PowerMock需要模拟静态类型 @RunWith(PowerMockRunner.class

2.4K31

Powermock系列之-01 Powermock与Thead.sleep

上述逻辑要重复30次,也就是15秒后,如果登陆状态不是上述成功/失败的状态,则表示未收到登陆答复等逻辑,需要切换服务器继续登陆。...); systemClass.callThead(); assertEquals(0, systemClass.j); } } 案例分析 对于mock的挑战有两个,首先Thread.sleep是一个静态方法...得益于Powermockito对于静态方法进行Mock的能力,使用如下格式,就实现了预期的调用Thread.sleep时抛出中断异常的行为,从而实现了大大缩短程序执行时间的目标。...doThrow(new InterruptedException()).when(Thread.class); Thread.sleep(Mockito.anyLong()); 当然,为了能够mock某个类的静态方法...,需要在测试类上加上一下注解, @PrepareForTest( { SystemClass.class}) 并且使用Powermockito.spy这个方法来部分mock Thread这个类。

2.3K20

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

在修改单元测试的过程中,不幸踩了个坑,发现 Powermockito 的PowerMock.mockStatic(ClassThatContainsStaticMethod.class) 在多线程场景下是无法正常工作的...,这再次验证了之前 ThrougthWorks 顾问说的那句话: 除非万不得已,或者是Mock遗留系统接口,否则不要使用Powermockito。...发生问题的场景是这样的 Class C 有一个静态方法,Class A 和 Class B 都需要调用这个方法完成一些功能: Class C{truepublic static SomeObject getSomeObject...由于我不是Powermockito的专家,所以无法深入的去探究这个问题的原因,但是我想,这应该是和静态方法本身在一个JVM内的唯一性有关,我截取了网上两个解释供参考: Explanation 1 Without

5.5K30

Springboot多种方法处理静态资源:设置并访问静态资源目录

尤其是设置图片的静态资源,尤其重要: [静态资源图片][静态资源图片]这样的静态资源访问不会被Springboot所拦截处理(方便用于CDN加速): [Springboot日志并没有显示] 虽然真实项目里...Springboot内设置静态资源,或者说静态资源文件夹,主要有两种方法(均为SpringMVC实现): 在application.yml/application.properties内配置。...如果需要设置多个地址为静态资源目录,可以参考下文的设置配置类方法方法。 设置配置类方法 配置详解 写一个配置类,实现静态资源的文件夹方法很多。...方法在Spring5.0和Springboot2.0之后,已经弃用。...总结 综上所述,就是Springboot静态资源目录添加方法啦。是不是和Nginx很像? 虽然现在Nginx和对象存储都很方便,但是直接用Springboot进行静态资源的划分,也不为一种方法

4.4K33

Android开发之逻辑单元测试

+ powermock这一套单元测试框架,选择powermock的一个重要的原因就是:现如今比较流行的Mock工具如jMock 、EasyMock 、Mockito等都有一个共同的缺点:不能mock静态...mock就是模拟,在代码逻辑测试中,有时候我们需要某一个方法返回我们指定的值,这样才能跑我们预测的代码逻辑,从而通过验证执行结果的正确性来反映该代码逻辑是否有问题,比如: /** * 开始处理同步通知任务...,对象中的一些值已经被初始化了,例如对象中的变量的赋值,静态代码块,构造函数都已经执行;但是对于mock出来的heartConfig对象,它的一切都是空的,调用getMinHeart()也不会真正的去执行这个方法...).when(syncInformHandler, "canDoSync", Mockito.anyLong(), Mockito.anyLong()); mock类中的静态方法 PowerMockito.mockStatic...误区:场景测试,针对一些比较复杂场景的方案设计和编码,罗列出原先设计方案所支持的那些场景,然后用单元测试模拟这些场景来测试,例如我想测试一些多线程场景的问题,所以在测试方法里会开启多个线程,而且在这些线程运行结束之前这个测试方法不能结束

1.4K10

junit4整合PowerMockito进行单元测试

所以我们在单测中,往往会使用mock的方式对这些代码做一个数据的模拟,从而达到对代码进行测试的一个目的。...,单测要覆盖到方法中的每一行代码 自动断言:每一段单测代码都应该有自己的断言方法,而不是通过打印再人工查看正确性 所以我们就有了Mockito,它可以模拟对象,模拟对象方法的返回值,来完成mock...本文使用的是PowerMockito,它是由Mockito的基础上开发而来,语法规则基本一致,同时也有一些自己的增强,可以对静态方法,局部变量进行mock。...mock 如何对静态方法的返回值进行mock 先在PowerMockitoServiceImpl.java添加一个静态方法,其中发现HttpUtil.get()是一个静态方法 @Service public...@InjectMocks private PowerMockitoServiceImpl powerMockitoServiceImplUnderTest; /** * 静态方法

76330

玩花招的PowerMock

(); EmployeeTableUtil.findAll();} Mock静态方法的关键是先要调用框架定义的PowerMockito类的mockStatic()方法(针对EasyMock有相似的类...方法接收的参数就是我们要Mock的类的类型。接下来就可以调用Mockito框架的方法,对我们要模拟方法findAll()进行模拟,这里主要的工作是为模拟方法的返回值设置一个stub。...如果需要验证被Mock的方法是否被调用,则需要调用PowerMockito.verifyStatic()方法,紧随其后的是被mock的方法。...因为是实例方法,所以下面的测试方法通过调用setTableUtil()方法将被模拟的对象注入到EmployeeRepository对象中: @Test public void should_mock_private_method...由于是静态方法,更多的是需要静态初始化。此外,还有一种情形时,你所要测试的类声明和初始化了一个静态的字段。这些都可能需要调用静态初始化。

1.3K20

Mockito模拟进行单元测试

1.3 Stub和Mock异同 相同:Stub和Mock都是模拟外部依赖 不同:Stub是完全模拟一个外部依赖, 而Mock还可以用来判断测试通过还是失败  1.4 Mockito资源 官网: http...artifactId> 3.0.0 test 使用Powermock和Mockito测试静态方法...@InjectMocks private UserServiceImpl userService; 进行注入,之后,方法内部实现需要调用的三方方法通过@mock进行模拟...注意这次调用:有通过AopContext来获取当前代理类的操作,但是当前单元测试并没有走spring的生命周期,bean也没有交给spring进行管理,那么调用这个静态方法肯定是要报错的,那么如何解决呢...解决方法很简单,只要把这个静态方法也mock掉就可以了: 主要通过 @PrepareForTest({AopContext.class}) PowerMockito.mockStatic(AopContext.class

9.2K20

Mockito模拟进行单元测试

artifactId> 3.0.0 test 使用Powermock和Mockito测试静态方法...@InjectMocks private UserServiceImpl userService; 进行注入,之后,方法内部实现需要调用的三方方法通过@mock进行模拟...这样的好处时在生产环境跑单元测试时也不会影响数据库的数据 注意这次调用:有通过AopContext来获取当前代理类的操作,但是当前单元测试并没有走spring的生命周期,bean也没有交给spring进行管理,那么调用这个静态方法肯定是要报错的...解决方法很简单,只要把这个静态方法也mock掉就可以了: 主要通过 @PrepareForTest({AopContext.class}) PowerMockito.mockStatic(AopContext.class...剩余还有mock调用返回值是void的方法时的写法: PowerMockito.doNothing().when(casService).addSupplier(anyLong(), any(ServiceKey.class

6.8K20

Java一分钟之-PowerMock:静态方法与私有方法测试

静态方法模拟 在项目中,经常遇到依赖于静态方法的类,直接测试这类代码会引发一系列问题,如环境依赖、全局状态改变等。PowerMock允许你模拟静态方法,控制其返回值或行为,从而在测试中隔离这些影响。...过度使用 模拟静态方法和私有方法虽能解决测试隔离问题,但过度使用会增加测试的维护成本,降低代码的可读性和可维护性。...忽略真实行为模拟 模拟方法时,如果不小心模拟了不应该被改变的行为,可能导致测试通过但实际运行时出现问题。 解决方案:精确控制模拟行为,确保模拟逻辑与真实逻辑一致,特别是在模拟复杂的静态方法时。 4....解决方案:每次测试后清理模拟行为,使用@After或@AfterClass注解的方法来确保测试环境的干净。 代码示例:静态方法模拟 下面的例子展示了如何使用PowerMock模拟一个静态方法。...模拟了StaticClass的静态方法someStaticMethod,并验证了它在MyClass.methodUnderTest方法中的使用情况。

26210
领券