如何在JUnit测试中正确包含Android OS类

时间:2013-11-26 22:08:58

标签: java android junit

我有一段代码,我正在使用Android App。我正在尝试一些事情,所以我有一些非常脏(I.E.没有很好的封装,但工作)测试。问题是我最近尝试包括一个创建模型对象的测试。但是,为了与Android活动很好地配合,我正在实现Parcelable。因此,当我尝试运行测试时,我看到......

  

引起:java.lang.ClassNotFoundException:android.os.Parcelable       在java.net.URLClassLoader $ 1.run(URLClassLoader.java:359)       在java.net.URLClassLoader $ 1.run(URLClassLoader.java:348)       at java.security.AccessController.doPrivileged(Native Method)       在java.net.URLClassLoader.findClass(URLClassLoader.java:347)       at java.lang.ClassLoader.loadClass(ClassLoader.java:423)       at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)       at java.lang.ClassLoader.loadClass(ClassLoader.java:356)       ......还有38个

我尝试将以下文件夹添加到我的类路径中(在Eclipse中的调试配置下)

ADT/sdk/platforms/android-10/data/android/os

但我仍然得到错误。如果没有创建一个完整的大包来在实际设备上运行,那么我可以使用jar或其他东西让它工作吗?

1 个答案:

答案 0 :(得分:0)

这就是我提出的将Parcelable与模型类分开的原因。这是一个例子......

package com.gleason.apahelper.model.parcelable;

import java.util.ArrayList; import java.util.List;

import com.gleason.apahelper.model.Team;

导入android.os.Parcel; import android.os.Parcelable;

public class TeamParcel implements Parcelable{
private Team team;

public static TeamParcel[] getParcelable(List<Team> teams){
    TeamParcel[] parcel = new TeamParcel[teams.size()];
    for(int i = 0 ; i < teams.size(); i++){
        parcel[i] = new TeamParcel();
        parcel[i].team = teams.get(i);
    }
    return parcel;
}


public static List<Team> getTeams(TeamParcel[] parcels){
    List<Team> list = new ArrayList<Team>();
    for(TeamParcel parcel : parcels){
        list.add(parcel.team);
    }
    return list;
}
public TeamParcel(){
}

public TeamParcel(Parcel in){
    String[] data = new String[2];
    in.readStringArray(data);
    team = new Team();
    team.setTeamId(Integer.parseInt(data[0]));
    team.setTeamName(data[1]);
}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeStringArray(new String[] {String.valueOf(team.getTeamId()),
            team.getTeamName()});
}
public static final Parcelable.Creator<TeamParcel> CREATOR = new Parcelable.Creator<TeamParcel>() {
    public TeamParcel createFromParcel(Parcel in) {
      return new TeamParcel(in);
    }
    public TeamParcel[] newArray(int size) {
      return new TeamParcel[size];
    }
};


}

我还没有完全测试过,所以我不接受这个答案,但似乎有效。我很乐意接受更好(或更好解释)的答案。