我是Spock测试框架的新手,我试图为我正在工作的一个android项目做一些测试。我目前测试的这些对象是PJO,所以可以用常规的Spock测试它们。出于某种原因,我一直在我的一个对象上调用isAlive方法,但我知道它被调用了,感觉我已经在调试器中运行了它,它被调用了。所以我希望有人能引导我知道我做错了什么。
public void start(int startIndex, boolean overrideDownloadOnCellNetwork){
this.downloadIndex = startIndex;
this.overrideDownloadOnCellNetwork = overrideDownloadOnCellNetwork;
if(checkConnectionType(overrideDownloadOnCellNetwork)){
this.startTrackDownload();
}
}
// I should simplify this at some point.
private boolean checkConnectionType(boolean overrideDownloadOnCellNetwork) {
ConnectivityManager connManager = (ConnectivityManager) masterService.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo connection = connManager.getActiveNetworkInfo();
if(connection == null){
broadcaster.broadcastError(DownloadEvent.DownloadEventType.ERROR_NO_NETWORK, downloadIndex);
this.masterService.stop();
return false;
} else if(connection.getType() == ConnectivityManager.TYPE_MOBILE && (userModel.isCellDownloadsAllowed() || overrideDownloadOnCellNetwork)){
return true;
} else if (connection.getType() == ConnectivityManager.TYPE_WIFI){
return true;
} else {
broadcaster.broadcastError(DownloadEvent.DownloadEventType.ERROR_NO_WIFI_CELL_DOWNLOAD_NOT_ALLOWED, downloadIndex);
this.masterService.stop();
return false;
}
}
private void startTrackDownload(){
if(trackList.size() > 0) {
if (!downloadThread.isAlive()) {
downloadThread.start();
}
downloadThread.downloadTrack(downloadIndex, trackList.size(), bookModel.getBookID(), userModel.getSessionID());
}
}
下面是我的测试代码:
DownloaderImp downloader // this is a POJO
MasterService masterService
ActiveBookFactory activeBook
TrackListSubscriber trackListSubscriber
UserModel userModel
TrackSaver trackSaver
Notification notification
BookSaver bookSaver
BookModel bookModel
DownloadEventBroadcaster eventBroadcaster
DownloadThread downloadThread
Context context;
def "setup"(){
masterService = Mock(MasterService)
trackListSubscriber = Mock(TrackListSubscriber)
userModel = Mock(UserModel )
trackSaver = Mock(TrackSaver )
notification = Mock(Notification )
bookSaver = Mock(BookSaver)
bookModel = Mock(BookModel)
activeBook = Mock(ActiveBookFactory )
downloadThread = Mock(DownloadThread)
eventBroadcaster = Mock(DownloadEventBroadcaster)
bookModel.getTrackModels() >> [new TrackModel(1), new TrackModel(2)]
activeBook.get("downloading") >> bookModel
bookModel.getId() >> 1
downloader = new DownloaderImp(activeBook,
trackListSubscriber,
userModel,
trackSaver,
bookSaver,
downloadThread,
eventBroadcaster)
context = Mock(Context)
masterService.getContext() >> context
downloader.setService(masterService)
}
def "should check if download thread is alive"(){
given:
def mockConnectionManager = Mock(ConnectivityManager)
def mockNetworkInfo = Mock(NetworkInfo)
masterService.getContext().getSystemService(Context.CONNECTIVITY_SERVICE) >> mockConnectionManager
mockConnectionManager.getActiveNetworkInfo() >> mockNetworkInfo
mockNetworkInfo.getType() >> ConnectivityManager.TYPE_MOBILE
when:
downloader.start(0, true)
then:
1 * downloadThread.isAlive()
}
任何帮助都将不胜感激。我已经在我能想到的每种配置中尝试过了...它总是有同样的问题。
这个问题贴出来已经有一段时间了,但无论如何我都会试着回答它。
对Thread对象进行单元测试是有问题的,因为isalive()
方法是final boolean(您将无法模拟它)。在代码中,应避免在内部逻辑中使用此方法。在这种情况下使用包装器(比如接口)也许是个好主意,但最重要的是在测试线程时要计算start()
和interrupt()
方法的调用。
下面是源代码和测试代码,有人能让我知道我做错了什么吗?似乎根本没有调用dao mock并返回“USA”。我在网上做了一些研究,找不到我做错了什么。 下面是我的Spock测试代码:
编辑: 链接到repo示例:https://gitlab.com/bartekwichowski/spock-too-many
我正在使用Javascript创建一个csv文件供下载,除了IE(我已经测试了8和10),它在所有方面都工作得非常好。 在IE8中,当我单击按钮创建并下载文件时,会出现一个错误,并显示“传递给系统调用的数据区域太小”。在IE10中,当我单击按钮时,它只会打开一个新选项卡,其中包含我在地址栏中创建的URL,但不会下载任何内容。 你知道这个错误是什么意思吗? 我在按钮中有此代码: 这与这个问题有关,但
测试代码为: 测试代码为: 你知道怎么了吗?
我遇到JSON解析错误。我的代码如下: 我从我的检查中得到以下错误: 由于:com,无法分析JSON。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN\u对象,但在第1行第2列为BEGIN\u数组 对于我试图读取的JSON,如果成功,我的应该返回5。 我做错了什么?