zoukankan      html  css  js  c++  java
  • 在Android中进行单元测试遇到的问题

    问题1、Cannot connect to VM  socket closed

    在使用JUnit进行测试的时候,遇到这个问题。网上的解释是:使用Eclipse对Java代码进行调试,无论是远程JVM还是本地JVM都会进行Socket通讯.发生这样的错误是由于这些软件会修改winsock,还会监听和占用一些端口,Socket通讯不上造成的。

    我通过cmd →ping localhost ,发现localhost指向::1,这是因为我的系统是win7 ,它支持IPv6的原因。而Eclipse需要localhost指向127.0.0.1。于是就修改hosts文件(C:WindowsSystem32driversetchosts)。发现hosts中有两行被注释掉了(#后的东西代表被注释掉了)。

    # 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了。

    这个问题也可能是本地的配置文件被修改,或防火墙开着的原因。如果本地文件被修改,那么在cmd命令行里面输入netsh winsock reset命令就可以解决。

    问题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中的位置在注释中。

    根据自己的程序,在AndroidManifest.xml文件中配置上面的信息。如果上面的信息配置正确,鼠标右键单击工程,选择Run AsRun configurations,在Android JUnit Test选项中选择工程,将会看到下面这个界面:

    image

    在Instrumentation runner后的列表框选项中,我们看到android.test.InstrmentationTestRunner,并处于当前选择状态。如果这个没 有选择框中没有任何选项,就说明AndroidManifest.xml配置有问题。

    问题3、Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'

    1、首先确保你已经引入了JUnit测试框架,添加的办法是:右键点你的项目→选中“Build Path”→选中“Configure Build Path…”→在Libraries选项卡中点击“Add Library”(如下图)→ 添加JUnit4测试框架

    image

    2、记得在“Order and Export”选项卡中添加JUnit 4的依赖(如下图)。

    image

    问题4、在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:我的文档workspacesolarTesths_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单元测试的四部曲

  • 相关阅读:
    A Year Of Books
    Spring Boot 之 RESRful API 权限控制
    Git回滚远程版本
    初探设计:Java接口和抽象类何时用?怎么用?
    深入浅出: Java回调机制(异步)
    深入浅出: 大小端模式
    Java IO 之 FileInputStream & FileOutputStream源码分析
    Java IO 之 OutputStream源码
    软件测试--安装软件
    Mybatis 中$与#的区别
  • 原文地址:https://www.cnblogs.com/kissazi2/p/3517291.html
Copyright © 2011-2022 走看看