Android(安卓)Studio 单元测试之简单版
16lz
2021-01-26
单元测试的意义
单元测试能帮我们很快的找出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交互的单元测试
更多相关文章
- tcping测试服务器TCP端口
- Android中Junit测试、XML的序列化与解析
- Android(安卓)studio安装与配置Butter knife过程
- Android(安卓)Studio如何发布APK
- Android下编写单元测试步骤
- textview点击后selector的pressed无效果
- Android使用ListView构造复杂页面,并响应点击事件,通过intent跳转
- Android单元测试(五):依赖注入,将mock方便的用起来
- Android测试之Keycode