- 把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());
}
}