【十】注入框架RoboGuice使用:(Your First Testcase)
2023-09-14 09:10:25 时间
上一篇我们简单的介绍了一下RoboGuice的使用(【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)),今天我们来看下測试用例(TestCase)的注入
RoboGuice使得我们更加easy实现可測试的Android应用程序,本文章就来具体讲解下:当我们測试的时候,怎样编写測试用例,已经从RoboGuice中获益。本文章使用Android Robolectric,适合大部分用Android标准測试的情况。
我们用Mockito来模拟关系依赖,EasyMock使用同一种方式。
(一):来进行測试RoboActivity的子类,如果如今有一个使用Service 的Activity
public class MyRoboActivity extends RoboActivity { @Inject MyService service; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); service.compute(); } } public class MyService { public void compute() { ... } }然后须要编写測试用例来检查Activity是否正确调用了servce。
@RunWith(RobolectricTestRunner.class) public class MyActivityTest { private Service serviceMock = mock(Service.class); @Before public void setup() { // Override the default RoboGuice module RoboGuice.overrideApplicationInjector(Robolectric.application, new MyTestModule()); } @After public void teardown() { // Don't forget to tear down our custom injector to avoid polluting other test classes RoboGuice.Util.reset(); } @Test public void createTriggersCompute() throws InterruptedException { Robolectric.buildActivity(MyActivity.class).create().start(); verify(serviceMock).compute(); } public class MyTestModule extends AbstractModule { @Override protected void configure() { bind(Service.class).toInstance(serviceMock); } } }该測试下面几项:
①:在设置的时候,会覆盖RoboGuice默认绑定而且使用一个自己定义的測试模块
②:这个測试模块绑定Service到mock上面
③:该測试创建一个MyActivity的实例,该会通过注入(injection)获取mock
④:验证mock应该被调用.
(二):測试一个服务,如果有个service例如以下:
public class MyService { @Inject Vibrator vibrator; @Inject Context context; public void compute() { context... vibrator.vibrate(...); } }然后我们能够编写一个简单的測试用来检測service是否正确调用了vibrator
@RunWith(RobolectricTestRunner.class) public class ServiceTest { protected Vibrator vibratorMock = mock(Vibrator.class); protected Service service; @Before public void setup() { // Override the default RoboGuice module RoboGuice.overrideApplicationInjector(Robolectric.application, new MyTestModule()); service = RoboGuice.getInjector(Robolectric.application).getInstance(Service.class); } @After public void teardown() { // Don't forget to tear down our custom injector to avoid polluting other test classes RoboGuice.Util.reset(); } @Test public void computeShouldCausePhoneToVibrate() { service.compute(); verify(vibratorMock).vibrate(...); } public class MyTestModule extends AbstractModule { @Override protected void configure() { bind(Vibrator.class).toInstance(vibratorMock); } } }该測试下面几项:
①:在设置的时候,会覆盖RoboGuice默认绑定而且使用一个自己定义的測试模块
②:该測试模块绑定Vibrator到mock中
③:该測试模块会创建service的实例,通过注入会获取上下文以及mock
④:验证mock已经被调用了
相关文章
- SCMS代码审计-SQL注入
- 使用WebSocket在Server类中无法使用Autowired注解进行自动注入
- Spring之常用注解 注解开发 依赖注入 配置类 整合Junit......(1)
- 【IOC 控制反转】Android 事件依赖注入 ( 事件三要素 | 修饰注解的注解 | 事件依赖注入步骤 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
- Linux分区——为你的系统注入新生命(linux系统下分区)
- MSSQL登录框注入攻击预防策略(mssql 登录框注入)
- 编写通用的asp防注入程序
- PHP与SQL注入攻击防范小技巧
- 扩展ASP.NETMVC三层框架且使用StructureMap实现依赖注入1-Model层