首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当我的活动依赖于通过意图传递的额外内容时,我该如何编写android JUnit测试?

当我的活动依赖于通过意图传递的额外内容时,我该如何编写android JUnit测试?
EN

Stack Overflow用户
提问于 2010-12-01 08:20:02
回答 1查看 11.7K关注 0票数 19

我正在为一个依赖于通过意图传递给它的额外内容的类编写一个android Junit测试。我能够让类正常工作,但我仍然想知道如何为这样的类编写单元测试,因为测试仍然失败。

代码语言:javascript
复制
public class AddClassEvent extends Activity{
 private String eventType;

  @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  Bundle extras = getIntent().getExtras();
  final String cNo = extras.getString("CourseNum");

  // create a model instance
  final StudentDBModel model = new StudentDBModel(this);

  setContentView(R.layout.add_class_event);
 .....
 .....
         }
     }

测试类看起来像...

代码语言:javascript
复制
public class AddClassEventTest extends ActivityInstrumentationTestCase2<AddClassEvent>{
 private StudentDBModel model = null;
 private RenamingDelegatingContext context = null;

 public AddClassEventTest() {
  super("com.UI", AddClassEvent.class);
 }

 /**
  * This method is called before each test.
  */
 @Override
 public void setUp() {
  context = new RenamingDelegatingContext(getActivity(), "test_");
  model = new StudentDBModel(context);
 }

 /*
  * This function will test addNewClassEvent() from StudentDBModel
  */
 public void testAddNewClassEvent(){

  ContentValues courseValues = new ContentValues();
  courseValues.put("CourseId", "60-415");
  courseValues.put("CourseName", "Advanced Database Design");
  courseValues.put("Section", "1");
  courseValues.put("Location", "Erie");
  courseValues.put("Credit", "3");
  courseValues.put("ProfEmail", "rfortier@uwindsor.ca");
  courseValues.put("Website", "cs.uwindsor.ca");

  model.addNewCourses(courseValues);

  int numEventsBefore = model.getNumClassEvents();

  ContentValues values = new ContentValues();

  values.put("EventName", "Assignment 1");
  values.put("CourseId", "60-415");
  values.put("EventType", "Assignment");
  values.put("EventWeight", "8");
  values.put("DueDate", "10/20/2010");

  model.addNewClassEvent(values);

  int numEventsAfter = model.getNumClassEvents();

  assertEquals(numEventsBefore + 1, numEventsAfter);
 }
}

问题是,我传递给AddClassEvent类的额外内容是在另一个类中创建并通过Intent传递给AddClassEvent的DB的PK。每当我运行测试时,我都会在行上得到一个空指针异常:

代码语言:javascript
复制
final String cNo = extras.getString("CourseNum");

如何从Junit Test中的额外信息中创建信息?有没有办法让这个测试起作用呢?我找了很久,也找不到答案。有没有办法在Junit测试中错误地创建额外的类,这样它就会认为它是由其他类创建的?如果是这样的话,有没有人可以教我怎么做?

好的,我试着采纳你的建议,并将我的setUp函数更改为:

代码语言:javascript
复制
@Override
public void setUp() {
    context = new RenamingDelegatingContext(getActivity(), "test_");
    model = new StudentDBModel(context);
    Intent addEvent = new Intent();
    addEvent.setClassName("com.UI", "com.UI.AddClassEvent");
    addEvent.putExtra("CourseNum", "60-415");
    setActivityIntent(addEvent);
    getActivity();
}

但是我仍然得到一个空指针异常。我的语法是错的吗?有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2010-12-02 06:26:56

好了,我发现了我的错误!setUp的代码只是顺序错误。它应该看起来像这样:

代码语言:javascript
复制
@Override
public void setUp() {
    Intent addEvent = new Intent();
    addEvent.setClassName("com.UI", "com.UI.AddClassEvent");
    addEvent.putExtra("CourseNum", "60-415");
    setActivityIntent(addEvent);
    context = new RenamingDelegatingContext(getActivity(), "test_");
    model = new StudentDBModel(context);
}

我调用了两次getActivity(),第一次调用在意图之前。通过使用正确的顺序,测试运行良好。谢谢你的帮助,McStretch。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4320099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档