• 【十】注入框架RoboGuice使用:(Your First Testcase)


             上一篇我们简单的介绍了一下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已经被调用了

        


          

  • 相关阅读:
    Redis 6.0 新特性多线程连环13问!
    这些Java8官方挖过的坑,你踩过几个?
    读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理
    AI学习笔记:人工智能与机器学习概述
    千亿级互联网平台技术架构及背后那些事
    报告老板,微服务高可用神器已祭出,您花巨资营销的高流量来了没?
    千亿级平台技术架构:为了支撑高并发,我把身份证存到了JS里
    从技术思维角度聊一聊『程序员』摆地摊的正确姿势
    TryCatch包裹的代码异常后,竟然导致了产线事务回滚!
    SpringBoot集成邮件发送
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4063407.html
Copyright © 2020-2023  润新知