美文网首页
Android单元测试

Android单元测试

作者: jacky123 | 来源:发表于2016-07-20 17:07 被阅读101次

    之前一直忽略单元测试,遇到问题的时候 (修改-运行-等待-操作-验证) 或者 (修改-debug-操作-验证),每次调试都是需要进行这么繁琐的步骤。因为一直没有去了解,去接触单元测试,干了这么久的开发,好像也习惯了,对这些也不厌其烦。也只能说是习惯了,但是难免碰到大姨夫的时候,心里一着急,也会有摔杯子的冲动。But 现在接触到了单元测试,改变命运的时候到了。
    现在流程的单元测试框架有很多:

    • 开源的Robolectric
    • 谷歌的Espresso
    • Mockito
      我今天一直在寻找一个问题的答案,这么多的框架,有什么区别,怎么去选择?

    Robolectric

    对于Android app来说,写起单元测试来瞻前顾后,一方面单元测试需要运行在模拟器上或者真机上,麻烦而且缓慢,另一方面,一些依赖Android SDK的对象(如Activity,TextView等)的测试非常头疼,Robolectric可以解决此类问题,它的设计思路便是通过实现一套JVM能运行的Android代码,从而做到脱离Android环境进行测试。下面对Robolectric3.0做个简单介绍,并列举了如何对Android的组件和常见功能进行测试的示例。

    1. 添加gradle 引入Robolectric3.0 和 AssertJ的依赖
    testCompile "org.robolectric:robolectric:3.0"
    testCompile "org.assertj:assertj-core:1.7.0"
    
    1. Activity测试
    Paste_Image.png
    import android.app.Activity;
    import android.widget.Button;
    import android.widget.TextView;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.robolectric.Robolectric;
    import org.robolectric.RobolectricGradleTestRunner;
    import org.robolectric.annotation.Config;
    
    import static org.assertj.core.api.Assertions.assertThat;
    
    /**
     * Created by jack on 2016/7/20.
     */
    
    @RunWith(RobolectricGradleTestRunner.class)
    @Config(constants = BuildConfig.class, sdk = 21)
    public class MainActivityTest {
        Activity activity;
        Button button;
        TextView textView;
    
        @Before
        public void setUp() {
            activity = Robolectric.setupActivity(MainActivity.class);
            button = (Button) activity.findViewById(R.id.bt_1);
            textView = (TextView) activity.findViewById(R.id.tv_hellow);
        }
    
        @Test
        public void mainActivity() {
            MainActivity mainActivity = Robolectric.setupActivity(MainActivity.class);
            assertThat(mainActivity.getTitle()).isEqualTo(mainActivity.getTitle());
            System.out.print(mainActivity.getTitle().equals((mainActivity.getTitle())));
        }
    
        @Test
        public void getTextContent() {
            textView.setText("123");
            button.performClick();
            System.out.print(textView.getText().toString());
        }
    }
    

    1. 运行mainActivity测试单元

    Paste_Image.png

    2. 运行getTextContent测试单元

    Paste_Image.png

    未完待续

    参考资料

    相关文章

      网友评论

          本文标题:Android单元测试

          本文链接:https://www.haomeiwen.com/subject/spyvjttx.html