End

AS 进行单元测试

以下为本人在AndroidStudio 2.0 上实测后得出的结论,不像网上那一堆堆的误人子弟的文章,都是过时的或者根本就是不对的。

简介

和eclipse需要配置清单文件不同,AndroidStudio自带的单元测试功能是不需要修改AndroidManifest.xml或gradle文件的,直接编写测试用例即可。
使用AS新建一个工程时,在src目录下会自动创建三个目录:

mian目录下为项目代码,androidTest目录下为编写Android测试用例使用,test目录下为编写Java测试用例使用。

gradle文件默认也已配置【testCompile 'junit:junit:4.12'】


Java测试用例

默认test目录下有一个现成的ExampleUnitTest类,我们稍加修改
/**
 * To work on unit tests, switch the Test Artifact in the Build Variants view.
 */
public class ExampleUnitTest {
	@Test
	public void addition_isCorrect() throws Exception {
		int sum = 2 + 2;
		System.out.println("结果为:" + sum);
		assertEquals(4, sum);
	}
}
打开测试用例类,切换到Structure面板,鼠标选中要测的方法,右键–Run [方法名],即可进行Java用例测试。


如果运行结果正确,Run面板会是绿色的

否则是红色的,比如我们将其中一行代码修改为
assertEquals(5, 2 + 2);

我们也可以添加自己的测试类或测试方法,只不过我们的测试方法上要满足以下条件
  • 方法要为【public】访问权限
  • 要添加【@org.junit.Test】的注解
  • 方法不能带参数(因为你没办法传递参数啊)

Android测试用例

同样,默认androidTest目录下有一个现成的ApplicationTest,我们稍加修改
/**
 * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
 */
public class ApplicationTest extends ApplicationTestCase<Application> {
	public ApplicationTest() {
		super(Application.class);
	}

	//方法名必须以test开头,并且方法不能带参数
	public void testSimple() {
		int width = getScreenWidth(getContext());
		Log.i("bqt", "屏幕宽:" + width);
		Toast.makeText(getContext(), "屏幕宽:" + width, Toast.LENGTH_SHORT).show();
		//assertEquals(4, 2 + 2);//可以没有声明语句
	}

	/**
	 * 获取屏幕宽
	 */
	private int getScreenWidth(Context context) {
		DisplayMetrics metric = new DisplayMetrics();
		((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metric);
		return metric.widthPixels;
	}
}
运行后

并且可以生成与运行环境(即Context)有关的日志(这才是最重要的用途,我们可以在不运行APP的情况下获取App所有数据)

不过,很遗憾,我们不能直接操作UI(吐司没有弹出来)

我们的测试方法上要满足以下条件
  • 方法要为【public】访问权限
  • 所有的测试方法必须以test作为前缀(上面的Java测试用例是要求有@Test的注解
  • 方法不能带参数(因为你没办法传递参数啊)
不过很奇怪的是,ApplicationTestCase类提示过时了,但是又没提示用哪个替换……而且这是你自动帮我生成的呀……





posted @   白乾涛  阅读(3111)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示