Robolectric通过实现一套JVM能运行的Android代码,然后在Junit test运行的时候去截取android相关的代码调用,然后转到他们的他们实现的代码去执行这个调用的过程。不用依赖真实的 Android 环境中运行(模拟器或者真机)
Robolectric主要适用于UI的测试,比如Activity,Fragment,一些页面操作的测试场景,采用Shadow的方式对Android中的组件进行模拟测试,从而实现Android单元测试Robolectric正好弥补了Mockito的不足,两者结合使用是最完美的。
现在我们就开启Robolectric的测试之旅吧!
需要测试的类:
public class QXUnitTestActvity extends MSBaseActivity {
@BindView(R.id.btn_changge) Button mbtn;
@BindView(R.id.textView) TextView mTv;
public String name;
private QxBroacastReceiver receiver;
private Handler mHandler;
public int mCount=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_unit_test);
ButterKnife.bind(this);
name="create";
registerBroacast();
mHandler=new Handler(getMainLooper());
}
private void registerBroacast() {
IntentFilter filter=new IntentFilter();
filter.addAction("com.wr.qx.ok");
receiver= new QxBroacastReceiver();
registerReceiver(receiver,filter);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@OnClick(R.id.btn_changge) void changeText(){
mTv.setText("我被修改了");
if(name.equals("jump")){
startActivity(new Intent(this,MSCurrentInvestActivity.class));
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mCount=6;
}
},500);
Toast.makeText(this,"hello",Toast.LENGTH_LONG).show();
Dialog dialog=new Dialog(this);
TextView tv=new TextView(this);
tv.setText("我是一个dialog");
dialog.setContentView(tv);
dialog.show();
dialog.setCancelable(true);
final AlertDialog alertDialog=new AlertDialog.Builder(this)
.setIcon(getDrawable(R.mipmap.ic_launcher))
.setMessage("hello")
.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Overr