在Android中進行單元測試遇到的問題

問題一、Cannot connect to VM  socket closed

在使用JUnit進行測試的時候,遇到這個問題。網上的解釋是:使用Eclipse對Java代碼進行調試,不管是遠程JVM仍是本地JVM都會進行Socket通信.發生這樣的錯誤是因爲這些軟件會修改winsock,還會監聽和佔用一些端口,Socket通信不上形成的。html

我經過cmd →ping localhost ,發現localhost指向::1,這是由於個人系統是win7 ,它支持IPv6的緣由。而Eclipse須要localhost指向127.0.0.1。因而就修改hosts文件(C:\Windows\System32\drivers\etc\hosts)。發現hosts中有兩行被註釋掉了(#後的東西表明被註釋掉了)。java

# localhost name resolution is handled within DNS itself.
#    127.0.0.1       localhost
#    ::1             localhost

而後,去掉127.0.0.1前的#號,就能夠了。若是沒有127.0.0.1   localhost這行,則本身手動添加上去。這樣咱們就將localhost重定向爲127.0.0.1了。android

這個問題也多是本地的配置文件被修改,或防火牆開着的緣由。若是本地文件被修改,那麼在cmd命令行裏面輸入netsh winsock reset命令就能夠解決。windows

問題2:在Android中進行單元測試,須要在項目中的Manifest.xml文件中添加一些必要的配置。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.bang.test"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    
        <!-- 在本應用中導入須要使用的包,放在application裏面activity外面 -->
        
<uses-library android:name="android.test.runner" />
        
        <activity android:name=".JunitTestActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
    </application>
    
    
<uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
    <!-- 記住這個一要放在application外面,否則會出現配置錯誤 信息 -->
    
<instrumentation android:name="android.test.InstrumentationTestRunner"

 android:targetPackage
="com.bang.test" android:label="Tests for My App" />
</manifest>

必需要添加的配置,已經在上面的示例配置文件中用灰色背景標出來了,配置須要放置Manifest中的位置在註釋中。app

根據本身的程序,在AndroidManifest.xml文件中配置上面的信息。若是上面的信息配置正確,鼠標右鍵單擊工程,選擇Run As\Run configurations,在Android JUnit Test選項中選擇工程,將會看到下面這個界面:框架

image

在Instrumentation runner後的列表框選項中,咱們看到android.test.InstrmentationTestRunner,並處於當前選擇狀態。若是這個沒 有選擇框中沒有任何選項,就說明AndroidManifest.xml配置有問題。socket

問題三、Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'

一、首先確保你已經引入了JUnit測試框架,添加的辦法是:右鍵點你的項目→選中「Build Path」→選中「Configure Build Path…」→在Libraries選項卡中點擊「Add Library」(以下圖)→ 添加JUnit4測試框架jsp

image

二、記得在「Order and Export」選項卡中添加JUnit 4的依賴(以下圖)。單元測試

image

 

問題四、在Android項目中的測試類點擊"run as JUnit test"出錯

 

控制檯中會有一段錯誤提示測試

Invalid layout of java.lang.String at value
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (javaClasses.cpp:136), pid=5560, tid=5584
#  fatal error: Invalid layout of preloaded class
#
# JRE version:  (7.0_40-b43) (build )
# Java VM: Java HotSpot(TM) Client VM (24.0-b56 mixed mode windows-x86 )
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# D:\個人文檔\workspace\solarTest\hs_err_pid5560.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

後面發現是debug configuration的問題。個人測試項目的BootStrap Entries,默認是Android2.3.3。只要去掉這個東西就好了。只要右鍵點你的項目→選中「Debug As」→ 選擇「Debug Configurations」→而後按下圖操做,去掉對Android2.3.3的啓動依賴便可。

image

 

 

 

參考連接

 如何進行Android單元測試

Android上的單元測試

在Android上實現Junit單元測試的四部曲

相關文章
相關標籤/搜索