android-Junit测试单个activity一

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangbin_learn/article/details/51200567

这两天没事看了点跟安卓测试有关的文章,发现国内手机测试资料并不多。但是英文看不很懂,所以就先写点基础的测试代码做为记录,以后慢慢啃英文的吧。希望国内更多大神分享手机测试经验。我也不知道什么时间开始就喜欢上了测试,那种喜欢就是莫名其妙没有任何理由的就喜欢上了,看了Android单元测试(二):再来谈谈为什么这篇文章作者一系列的测试文章后,其实我觉得还有非常重要一点的原因是支撑你写测试代码的动力,那就是喜欢。当你不为什么功力,名誉去喜欢一件东西,做一件事时间,那种感觉就像是一种高峰体验一样。

这也是我的第一篇博客,至于为什么写博客,一个是为了把学的东西整理下来,二是为了以后好回顾。博客的编辑不太会,不知道这篇博客最后会是什么样子的。希望不要太丑。好了接下来正文,至于为什么测试以及它的好处,请看我上面的那个大神链接。

第一篇文章是对单个activity的控件进行测试

先创建被测试的类:

public class MyFirstTestActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_first_test);
    }
}
布局很简单就是一个TextView上面有句话,代码就不贴了

接下来创建对应的测试包,跟Activity的包名一样,不过要以tests结尾(比如:com.example.android.testingfun.tests)

然后创建测试类,以Test结尾(比如:MyFirstTestActivityTest)。然后让你的测试类继承ActivityTestCase的子类ActivityInstrumentationTestCase2<MyFirstTestActivity>,并将被测试类作为泛型传入。

这时间你需要创建构造函数和setUp()方法。构造函数是由测试用的Runner来调用的。不过这里需要注意下,当你用工具自动生成构造时间是这样的:

public MyFirstTestActivityTest(Class<MyFirstTestActivity> activityClass) {
        super(activityClass);
    }
这个构造运行会报错:Class com.example.android.testingfun.tests.MyFirstTestActivityTest has no public constructor TestCase(String name) or TestCase()所以将构造改为:

 public MyFirstTestActivityTest() {
        super(MyFirstTestActivity.class);
    }
setUp()方法会在所有的测试方法前先被调用,类似于activity的OnCreat()方法。它需要先调用父类的构造,这是JUnit要求的。我们可以把后面一些需要重复的代码进行抽取,放在setUp()方法中。接下来上测试类的代码,代码中注释都有就不讲了。

public class MyFirstTestActivityTest extends ActivityInstrumentationTestCase2<MyFirstTestActivity>{

    private MyFirstTestActivity myFirstTestActivity;
    private TextView mFirstTestText;

    /**
     * 构造函数是由测试用的Runner调用,用于初始化测试类的
     */
    public MyFirstTestActivityTest() {
        super(MyFirstTestActivity.class);
    }

    /**
     * 把需要重复写的代码写在这个类似初始化的方法中
     * @throws Exception
     */
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        myFirstTestActivity = getActivity(); //获取正在测试的Activity的引用
        mFirstTestText = (TextView) myFirstTestActivity.findViewById(R.id.my_first_test_text_view); //获取布局
    }

    public void testPreconditons(){
        assertNotNull("activity is null",myFirstTestActivity); //断言是否为空
        assertNotNull("mFirstTestText is null",mFirstTestText);
    }

    /**
     * 验证text的文本
     * 当命名测试方法时,我们可以使用下划线将被测试的内容与测试用例区分开。这种风格使得我们可以更容易分清哪些是测试用例。
     */
    public void testMyFirstTestTextView_labelText(){
        String expected = myFirstTestActivity.getString(R.string.my_first_test);
        //String expected = "sdad";  //这个估计搞的错的
        String actual = mFirstTestText.getText().toString();
        assertEquals(expected,actual);
    }
}
好了对单个activity中的控件进行测试就到此结束了,大家可以自己试下不一样的控件的测试。下篇会记录些单个activity中的控件的操作事件android-Junit测试单个activity二-Ui组件。初写博客多有不足地方,欢迎大家给出建议。谢谢。
Reference:创建与执行测试用例






展开阅读全文

没有更多推荐了,返回首页