TA的每日心情 | 无聊 2024-9-27 10:07 |
---|
签到天数: 62 天 连续签到: 1 天 [LV.6]测试旅长
|
不依赖源码执行
接口测试也能直观看出覆盖度
知道什么样的用例保证哪块的代码,更好的精准度测试
1.实现jacoco Instrumentation操作(后面通过命令直接启动该instrument,最下面有),注意最后启动了 InstrumentedActivity
复制代码
- <p>public class JacocoInstrumentation extends Instrumentation</p><p>
- </p><p> @Override</p><p> public void onCreate(Bundle arguments) {</p><p> super.onCreate(arguments);</p><p> DEFAULT_COVERAGE_FILE_PATH = "/sdcard/cover.ec";</p><p>
- </p><p> File file = new File(DEFAULT_COVERAGE_FILE_PATH);</p><p> if (!file.exists()) {</p><p> try {</p><p> file.createNewFile();</p><p> } catch (IOException e) {</p><p> Log.d(TAG, "异常 : " + e);</p><p> e.printStackTrace();</p><p> }</p><p> }</p><p> if (arguments != null) {</p><p> //mCoverage = getBooleanArgument(arguments, "coverage");</p><p> mCoverageFilePath = arguments.getString("coverageFile");</p><p> }</p><p>
- </p><p> mIntent = new Intent(getTargetContext(), InstrumentedActivity.class);</p><p> mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);</p><p> start();</p><p> }</p>
复制代码
复制代码
2.在InstrumentedActivity onDestroy设置监听,当触发的时候触发生成jacoco覆盖率文件
- <p>
- </p><p><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 权限</p><p>复制代码</p><p>InstrumentedActivity extends MainActivity {</p><p> public static String TAG = "InstrumentedActivity";</p><p>
- </p><p> private FinishListener mListener;</p><p>
- </p><p> public void setFinishListener(FinishListener listener) {</p><p> mListener = listener;</p><p> }</p><p>
- </p><p>
- </p><p> @Override</p><p> public void onDestroy() {</p><p> Log.d(TAG + ".InstrumentedActivity", "onDestroy()");</p><p> super.finish();</p><p> if (mListener != null) {</p><p> mListener.onActivityFinished();</p><p> }</p><p> }</p><p>
- </p><p>}</p>
复制代码
复制代码
3.触发监听的操作
复制代码
- <p>private void generateCoverageReport() {</p><p> Log.d(TAG, "generateCoverageReport():" + getCoverageFilePath());</p><p> OutputStream out = null;</p><p> try {</p><p> out = new FileOutputStream(getCoverageFilePath(), false);</p><p> Object agent = Class.forName("org.jacoco.agent.rt.RT")</p><p> .getMethod("getAgent")</p><p> .invoke(null);</p><p>
- </p><p> out.write((byte[]) agent.getClass().getMethod("getExecutionData", boolean.class)</p><p> .invoke(agent, false));</p><p> } catch (Exception e) {</p><p> Log.d(TAG, e.toString(), e);</p><p> } finally {</p><p> if (out != null) {</p><p> try {</p><p> out.close();</p><p> } catch (IOException e) {</p><p> e.printStackTrace();</p><p> }</p><p> }</p><p> }</p><p> }</p>
复制代码
|
|