// use case 10b alternate version
// caches a read comment temporarily
public void testCacheReadComment2() throws Throwable{
runTestOnUiThread(new Runnable()
{
@Override
public void run(){
CommentBuilder commentBuilder = new commentBuilder();
Comment comment = commentBuilder.createTopTestComment();
//browse button on main screen
((Button)activity.findViewById(ca.ualberta.cs.team5geotopics.browseButton)).performClick();
//the ListView for the custom adapter
ListView listView = (ListView) activity.findViewById(ca.ualberta.cs.team5geotopics.commentList);
//the custom adapter on the physical screen
ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>) listView.getAdapter();
adapter.add(comment);
adapter.notifyDataSetChanged();
View view = adapter.getView(adapter.getPosition(comment), null, null);
ViewAsserts.assertOnScreen(listView, view);
//this is the button to view the Top Level comment in the list
ViewAsserts.assertOnScreen(view, (Button) view.viewTopLevelComment);
((Button)view.viewTopLevelComment).performClick();
// is there a way I can get references to the objects
// already instantiated in the test thread?
CacheController cc = activity.getCacheController();
assertTrue(cc.getHistory().contains(comment));
}
});
}
我们正在使用测试驱动的开发风格,以便为学校编写项目代码。在此测试中,我试图证明用户查看适配器中的列表中的注释后,该注释已缓存在历史记录缓存中。我对某些事情有些困惑,我希望获得一些帮助,因为如果我知道测试用例中没有明显的缺陷,那就太好了。这些是我的问题:
View view = adapter.getView(adapter.getPosition(comment), null, null);
该行是否将返回与数组适配器中存储的注释关联的视图?我的ArrayAdapter将遵循持有人模式,但我不确定这是否是访问需要模仿用户查看评论的按钮的正确方法。
CacheController cc = activity.getCacheController();
我有一个
CacheController
对象,该对象在我们的主要活动中的onCreate()
方法上实例化。现在,我想引用此CacheController
来查看历史记录是否正确更新。我只是创建一个新的CacheController
并模仿测试方法中CacheController
的操作,但是我想测试UIthread
上的数据会发生什么。那么,如何在UI线程中引用对象? 最佳答案
View view = adapter.getView(adapter.getPosition(comment), null, null);
该行是否将返回与评论关联的视图
存储在阵列适配器中?
我认为它应该起作用,但是我不明白您为什么要访问该视图。
我的ArrayAdapter将遵循持有人的模式,我不确定是否
这是访问我需要模仿的按钮的正确方法
用户查看评论。
ArrayAdapter
通常用于ListView
。您应该只是let ListView handle the click capturing and tell you which element was clicked。那么,如何在UI线程中引用对象?
您现在有两种解决方案,我现在可以想到:
1)传递
CacheController
实例,例如:public class YourClass {
private final CacheController cacheController;
public YourClass(final CacheController cacheController) {
this.cacheController = cacheController;
}
public void testCacheReadComment2() throws Throwable {
CacheController cc = this.cacheController;
}
}
2)Singleton:将
CacheController
设为静态并放置一个访问器,例如:public class CacheController {
private final CacheController instance = new CacheController();
public static CacheController getCacheController() {
return instance;
}
}
在这两种情况下,您都应该意识到潜在的多线程问题,因为您将产生所有共享相同
CacheController
实例的新线程。