Skip to content

Latest commit

 

History

History
87 lines (67 loc) · 3 KB

单元测试.md

File metadata and controls

87 lines (67 loc) · 3 KB

单元测试

添加依赖库

  • 把compile 改为testCompile,后者表示依赖项只需包括在应用的测试编译里,不会在apk包里捎带上无用代码库
    testCompile 'org.mockito:mockito-core:2.10.0'
    testCompile 'org.hamcrest:hamcrest-junit:2.0.0.0'

创建测试类

  • ctrl + shf + T 创建测试类,勾选setUp Before,选择单元测试类(规模小,只测试单个类),可以快速反复地执行

实现测试类

  • @before注解的包含公共代码的方法会在所有测试之前运行一次
  • 使用Mockito.mock(Object.class)创建虚拟对象:在用到其他对象时,为了避免由于其他对象自身的错误造成干扰,使用虚拟的对象继承自该 其他对象,有同样的方法,但这些方法啥都不干
public class SoundViewModelTest {
    private BeatBox mBeatBox;
    private Sound mSound;
    private SoundViewModel mSubject;      //把要被测试的类声明为mSubject


    @Before
    public void setUp() throws Exception {
        mBeatBox = Mockito.mock(BeatBox.class);
        mSound = new Sound("assetPath");
        mSubject = new SoundViewModel(mBeatBox);
        mSubject.setSound(mSound);
    }

    //添加注解,测试标题属性
    //断定测试对象获取标题的方法和sound获取文件名方法返回相同的值
    //getTitle:return mSound.getName()
    @Test
    public void exposesSoundNameAsTitle() {
        //is来自Is.is方法
        assertThat(mSubject.getTitle(), is(mSound.getName()));
    }

    @Test
    public void callsBeatBoxPlayOnButtonClicked() {
//        调用一下mSubject的方法,下面验证是否被调用了
        mSubject.onButtonClicked();
        //链式调用相当于verify(mBeatBox);  mBeatBox.play(mSound);

        //verify验证mBeatBox对象的某个方法是否调用了
        //.play验证这个方法是这样调用的
        //表示验证是否以mSound作为参数调用了mBeatBox对象的play方法
        verify(mBeatBox).play(mSound);
    }

}

二、 整合测试

  • 在整合测试中受测对象是整个应用,整合测试用UI测试框架工具来写
  • com.android.support.test.espresso:espresso-core:2.2.2 依赖库
  • 可以用来测试某个activity的行为,例如想断定某个视图显示了受测文件的文件名
//对BeatBoxActivity启动整合测试
//RunWith表明这是一个Android工具测试,需要activity和其他Android运行时环境支持
@RunWith(AndroidJUnit4.class)
public class BeatBoxActivityTest {
    @Rule
    public ActivityTestRule<BeatBoxActivity> mActivityRule =
            new ActivityTestRule<BeatBoxActivity>(BeatBoxActivity.class);

    @Test
    public void showsFirstFileName() {
        //找到显示“65..”的视图然后对其执行测试
        onView(withText("65_cjipie"))
                //用来判定有这样的视图   相当于JUnit的assertThat()断言方法
                .check(matches(anything()))
                //模拟点击
                .perform(click());
    }

}