应用进行单元测试
<?xml version="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.class3g"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<!—引入单元测试库类-->
<uses-library android:name="android.test.runner"/>
<activity android:name=".MainActivity">
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<instrumentation
<!—指定启动单元测试的类-->
android:name="android.test.InstrumentationTestRunner"
<!—指定单元测试类所在的包,要与相应的package相同-->
android:targetPackage="cn.class3g"
<!—指定单元测试的名称-->
android:label="MyJunitTest"
/>
</manifest>
编写要测试的代码:
User.java
packagecn.class3g;
public class User {
public void func1(){
String s = "abc";
int i = new Integer(s);
}
public int func2(){
return 20;
}
}
测试类,测试方法
MyTest.java
packagecn.class3g;
importandroid.test.AndroidTestCase;
public class MyTest extends AndroidTestCase {
public void testFunc1() throws Throwable{
User u = new User();
u.func1();
}
public void testFunc2() throws Throwable{
User u = new User();
this.assertEquals(20, u.func2());
}
}
一般需要把异常原样输出,不要捕获,否则测试没有意义了
在菜单栏windows—>Show View-->OutLine,找到要测试的方法然后右击Run AsàAndroidJunit Test,开始测试
Debug测试
public class Test1 {
public static void main(String[] args) {
int j=10;
for(int i=0; i<100; i++){
j = i*2;
show();
}
}
public static void show(){
System.out.println("show starting");
System.out.println("game over");
}
}
在想断点的那句代码前面 双击鼠标就会出现一个小点点。运行的时候必须得Debug As—>java Application运行
F5 step into 进入方法中,
F6 step over 一步步向下走,
F7 stop return 从方法中跳出,
F8 resume 执行到下一个断点,没有断点就到程序结束
日志输出
packagecn.class3g;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.util.Log;
publicclass MainActivity extends Activity {
public static String MYTAG ="mytag";
protected void onCreate(BundlesavedInstanceState) {
Log.i(MYTAG, "onCreatestarting......");
super.onCreate(savedInstanceState);
Log.i(MYTAG, "prepare to setview");
this.setContentView(R.layout.main);
Log.i(MYTAG, "onCreatestarted");
}
}
在windows—>Show View-àLogCat(deprecated)输出。
利用键盘或触摸实现多个布局页面的实现
packagecn.class3g.activity;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.KeyEvent;
importandroid.view.MotionEvent;
importandroid.widget.Toast;
publicclass FirstActivity extends Activity {
boolean flag = true;
private final static String TAG ="mytag";
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public boolean onKeyDown(int keyCode,KeyEvent event){
Log.i(TAG,"onKeyDown...");
showInfo("key按下" + keyCode);
returnsuper.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode,KeyEvent event) {
Log.i(TAG,"onKeyUp....");
showInfo("key放开"+keyCode);
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onTouchEvent(MotionEventevent) {
showInfo("触摸,坐标为:x="+event.getX()+"y="+event.getY());
flag = !flag;
if(flag){
this.setContentView(R.layout.main);
}else{
this.setContentView(R.layout.second);
}
Log.i(TAG,"onTouchEvent....");
return super.onTouchEvent(event);
}
public void showInfo(String info){
Toast.makeText(this, info,Toast.LENGTH_SHORT).show();
}
}