一、定义自己的日志工具
1、问题
项目上线后用于调试的日志信息还会被打印,这样不仅降低程序运行效率,还可能将一些机密性的数据泄露出去。
2、解决方案
自由控制日志打印,使得开发阶段就打印,上线之后就屏蔽。
public class LogUtil {
public static final int VERBOSE = 1;
public static final int DEBUG = 2;
public static final int INFO = 3;
public static final int WARN = 4;
public static final int ERROR = 5;
public static final int NOTHING = 6;
public static final int LEVEL = VERBOSE;
public static void v(String tag, String msg) {
if (LEVEL <= VERBOSE) {
Log.v(tag, msg);
}
}
public static void d(String tag, String msg) {
if (LEVEL <= DEBUG) {
Log.d(tag, msg);
}
}
public static void i(String tag, String msg) {
if (LEVEL <= INFO) {
Log.i(tag, msg);
}
}
public static void w(String tag, String msg) {
if (LEVEL <= WARN) {
Log.w(tag, msg);
}
}
public static void e(String tag, String msg) {
if (LEVEL <= ERROR) {
Log.e(tag, msg);
}
}
}
开发阶段将LEVEL设为VERBOSE级别,即可打印所有日志;发布阶段将LEVEL设为NOTHING级别,即可屏蔽所有日志信息。
二、调试
1、更便捷的进入调试模式
1)运行项目:Run As->Android Application启动程序。
2)打开DDMS试图:运行到需要调试的地方,然后进入DDMS试图,在Devices窗口中可看到我们正在运行的进程。
3)进入调试模式:选中我们要调试的进程,然后点击最上面一行的第一个按钮,就会让这个进程进入到调试模式了。进入调试模式后的进程名前会有一个虫子样式图标。
2、编写测试用例
1)是什么:测试用例就是一段普通的代码,通常带有期望的运行结果的,测试者可以根据最终的运行结果来判断程序是否能正常工作。
2)适用场景:当你正在维护一个很庞大的程序,某天,领导让你对其中一个功能进行修改,难度不高,你很快解决了,并且测试通过。几天后,突然有人发现其他功能出了问题,最终定位出的原因竟然是你之前修改过的那个功能所导致的。所以,当项目庞大时,一般应该去编写测试用例。如果我们给项目的每个功能都编写了测试用例,每当修改或新增任何功能之后,就将所有测试用例都跑一遍,只要有任何测试用例没通过,就说明修改或新增这个功能影响到现有功能了。
3)编写测试用例
a.创建测试工程
测试工程通常不是独立存在的,而是依赖于某个现有工程。
File->New->Other打开一个对话框,展开Android目录,在里面选中Android Test Project;然后点击Next,输入测试工程的名字,并选择测试工程的路径;最后,选择要为哪个项目创建测试功能。
生成的AndroidMainfest.xml文件中这些代码都是自动生成的,用来表明这是一个测试工程。
</pre><pre name="code" class="java"><instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.zzz" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
b.进行单元测试
单页测试是指对软件中最小的功能模块进行测试。
新建测试类,继承AndroidTestCase(自然可以定义多个测试类,最好跟要被测试的项目一一对应)
public class MainActivityTest extends ActivityTestCase {
public void testOnCreate(){
assertEquals(true, true);
System.out.println("--33");
assertEquals(false, true);
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
}
setUp()在所有的测试用例执行之前调用,可在这里执行一些初始化操作。tearDown()会在所有的测试用例执行之后调用,可在这里进行一些资源的释放操作。
如何编写测试用例呢?只需定义一个以test开头的方法,测试框架就会自动调用这个方法了。然后我们在这个方法中通过断言(assert)的形式来期望一个运行结果,再和实际结果进行对比,这样一条测试用例就编写完了。
最后在测试工程中->Run As->Android JUint Test来运行这个测试用例。