您的位置:首页 > 移动开发 > Android开发

实现Android测试项目与Qunit测试框架的互操作

2014-06-14 15:12 435 查看
实现Android测试项目与Qunit测试框架的互操作
 

之所以能够将Qunit测试框架应用到Android测试项目中来是基于这样的事实:WebView允许Android应用的Java代码与网页的Javascript代码的互操作

Java代码调用Javascript的方式如下

       首先在WebView中启用Javascript:

              

WebViewwv = (WebView)findViewById(R.id.webview1);
WebSettingsws = wv.getSettings();
ws.setJavaScriptEnabled(true);


       直接向loadUrl函数传递”javascript:”格式的函数调用URL就可以调用到正在浏览的网页的Javascript的方法。这是基于浏览器(或者说浏览器内核)对“javascript:”协议的解释来实现的。比如向浏览器地址栏中输入“javascript:fun();”,那么浏览器就会直接执行当前加载的页面中的fun()这个方法。

 

Javascript代码调用Java的方式如下:

       首先需要创建专供Javascript代码调用的Java类,然后调用WebView控件的addJavascriptInterface()方法来向javascript公开这个Java类。

       定义一个Java类CalledByJavascript 这里作为MainActivity的一个内部类来定义

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
…
tv = (TextView)findViewById(R.id.textview1);
}

final private TextView tv;

public class CalledByJavascript {
public CalledByJavascript () {
}

public void funOfJava(String message) {
tv.setText(“通过javascript调用来改变了TextView的文本”);
}
}
}


       通过WebView控件向javascript公开这个类

WebView wv = (WebView)findViewById(R.id.webview1);
WebSettings setting = wv.getSettings();
setting.setJavaScriptEnabled(true);
wv.addJavascriptInterface(
new CalledByJavascript (this), "android");  //"android"即为javascript代码中引用Java的主对象名


       在Javascript中调用Java代码:

function CallJavaCode(){
android. funOfJava (“通过javascript来调用Java函数”);
}


以下展示如何实现将Qunit应用到Android的测试项目中:

首先新建一个Android应用项目,只包含一个MainActivity,内含一个WebView控件。在MainActivity内定义一个内部类用来作为向Javascript公开的接口。MainActivity代码如下:

package com.winstonwolfe.usequnitdemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebSettings;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

WebView wv = (WebView)findViewById(R.id.webView1);
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new CalledByJavascript(), "android");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

public class CalledByJavascript { //Javascript接口类
public CalledByJavascript() {
}

@android.webkit.JavascriptInterface
public int add(int x, int y) { //待测函数
return x + y;
}
}

}


然后针对待测对象(这里是CalledByJavascript类的add成员方法)应用Qunit编写相应的Qunit测试用例页面,这里为QunitTestPage.html,文件内容如下:(注意这里默认Android对象名为“android”)

<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>QUnit测试用例</title>
<linkrel="stylesheet" href="qunit/qunit.css">
</head>
<body>
<divid="qunit"></div>
<divid="qunit-fixture"></div>
<scriptsrc="qunit/qunit.js"></script>
<script>
test("单元测试用例1", function () {
var x = 1;
var y = 2;
equal( android.add(x,y), 3, "期望值是3");
});

test("单元测试用例2", function () {
var x = -1;
var y = 2;
equal( android.add(x,y),1, "期望值是1");
});

</script>
</body>
</html>


       将如上的Qunit测试用例,包含其引用的js、css文件全部放到应用的assets文件夹下,方便后续访问(当然,也可以部署到远程Web服务器上)。

 

新建一个测试项目,在一个测试用例中调用待测应用的WebView控件,然后控制WebView加载资源文件夹中的Qunit测试页面,之后就可以运行测试项目进行测试了。测试用例代码如下:

package com.winstonwolfe.usequnitdemo.test;

import junit.framework.TestCase;
import junit.framework.Assert;
import com.winstonwolfe.usequnitdemo.MainActivity;
import com.winstonwolfe.usequnitdemo.R;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import android.webkit.WebView;

public class testCase1 extends ActivityInstrumentationTestCase2<MainActivity> {

public testCase1(){
super(MainActivity.class);
}

public void testWithQunit()throws InterruptedException {
// 找到待测应用的活动对象的引用
Activity activity = getActivity();
// 找到待测应用主界面上的WebView对象
final WebView wv =(WebView)activity.findViewById(R.id.webView1);
wv.loadUrl("file:///android_asset/QunitTestPage.html");

}

}

测试执行的效果如下:

 


 

同样的道理,如果想要对Qunit的测试结果在Android测试项目中做进一步处理,可以编写新的接口,然后将页面结果输出到后台,再做文本处理、统计等。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐