单元测试的意义

单元测试能帮我们很快的找出bug,能够让我们在项目开发的前期就发现问题,以降低后期发现问题解决的成本。

AndroidStudio怎么使用单元测试?

如果你安装的是最新版本的AndroidStudio,那么它本身就会自带单元测试框架
在build.gradle里你会发现这个:

 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    }) testCompile 'junit:junit:4.12'

这就是我们所要利用的单元测试框架

简单的用法

  • 测试自己写的普通Java方法
    示例编写一个计算器类
public class Calculator {   //+    public double sum(double a, double b){         return a + b;    }    //-    public double substract(double a, double b){        return a-b;    }   //%    public double divide(double a, double b){        return a%b;    }    //*    public double multiply(double a, double b){        return a*b;    }}

之后在这个类上我们右击

之后就能看到我们生成测试类,在里面加上断言来得到我们想要的结果。

package com.example.junittestdemo;import org.junit.Before;import org.junit.Test;import static org.junit.Assert.*;/** * Created by D'Russel on 2017/7/31. */public class CalculatorTest {    private Calculator mCalculator;    @Before    public void setUp() throws Exception {        mCalculator = new Calculator();    }    @Test    public void sum() throws Exception {        assertEquals(6d, mCalculator.sum(1d, 5d), 0);    }    @Test    public void substract() throws Exception {        assertEquals(1d, mCalculator.substract(5d, 4d), 0);    }    @Test    public void divide() throws Exception {        assertEquals(4d, mCalculator.divide(20d, 5d), 0);    }    @Test    public void multiply() throws Exception {    }}

那么怎么运行呢,对着测试类右击

运行结果

可以看出,我们4个方法都成功通过。

涉及UI的单元测试,步骤和上面的类似,只不过在生成测试类的时候要区分一下,选上面的androidTest

这个代码模拟的是一个输入框,一个文本框,一个按钮的组合动作,在输入框输入russel,点击按钮,会在文本框里显示”Hello,russel”
代码如下:sayHello为一个按钮绑定的点击事件。

public void sayHello(View v){        TextView textView = (TextView) findViewById(R.id.textView);        EditText editText = (EditText) findViewById(R.id.editText);        textView.setText("Hello," + editText.getText().toString()+"!");    }

测试类:

package com.example.junittestdemo;import android.support.test.rule.ActivityTestRule;import org.junit.Rule;import org.junit.Test;import static android.support.test.espresso.Espresso.onView;import static android.support.test.espresso.action.ViewActions.click;import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;import static android.support.test.espresso.action.ViewActions.typeText;import static android.support.test.espresso.assertion.ViewAssertions.matches;import static android.support.test.espresso.matcher.ViewMatchers.withId;import static android.support.test.espresso.matcher.ViewMatchers.withText;import static org.junit.Assert.*;/** * Created by D'Russel on 2017/7/31. */public class MainActivityTest {    private static final String STRING_TO_BE_TYPED = "russel";    @Rule    public ActivityTestRule mActivityRule = new ActivityTestRule<>(            MainActivity.class);    @Test    public void sayHello() throws Exception {        onView(withId(R.id.editText)).perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());   //给EditText自动输入russel        onView(withId(R.id.say_hello)).perform(click());   //自动点击按钮        String expectedText = "Hello," + STRING_TO_BE_TYPED + "!";        onView(withId(R.id.textView)).check(matches(withText(expectedText))); //对TextView 内容和刚刚输入的内容进行匹配     }}

执行测试用例

这个过程是需要模拟器或者真机测试的,不过不需要开发者手动去点击,它会自动执行这一过程。
然后我们发现这个用例执行成功

这养就完成了一个简单的有UI交互的单元测试

更多相关文章

  1. tcping测试服务器TCP端口
  2. Android中Junit测试、XML的序列化与解析
  3. Android(安卓)studio安装与配置Butter knife过程
  4. Android(安卓)Studio如何发布APK
  5. Android下编写单元测试步骤
  6. textview点击后selector的pressed无效果
  7. Android使用ListView构造复杂页面,并响应点击事件,通过intent跳转
  8. Android单元测试(五):依赖注入,将mock方便的用起来
  9. Android测试之Keycode

随机推荐

  1. 数据更新后让ListView自动滚动到底部
  2. 【Android(安卓)Studio 学习】—— day 0
  3. IOS多线程开发之GCD
  4. Android字体设置,Roboto字体使用
  5. Eclipse对Android项目导入、导出、修改工
  6. 《Android(安卓)系统源代码分析》PDF版电
  7. android-configChanges属性总结
  8. Android应用去掉标题栏状态栏(Android(安
  9. BlockCanary原理解析(Android端UI卡顿监
  10. Android(安卓)常用知识点整理(含链接)