一直在爲我的代碼做幾天的測試用例而掙扎。 我寫了一個代碼,用一串URL或一串URL的列表形式批量下載具有給定輸入的文件。我的代碼目前支持4種協議(http,https,ftp,sftp)用Mock編寫Python2.7 unittest(URLError:<urlopen error unknown url type:http>)
我一直在閱讀關於模擬的東西,並觀看了一些視頻。我仍然無法將我在互聯網上看到的樣本應用於我的實際代碼。 :(
下面是我實施批量下載和單元測試我寫這仍然是失敗的。
def batch_download(url):
req = Request(url)
try:
print '\nStart downloading...'
response = urlopen(req)
except URLError as e:
# No network connection or Invalid URL or The specified server doesn't exist.
if hasattr(e, 'reason'):
print 'We failed to reach a server.'
print 'Reason: ', e.reason
# HTTP Response that is not 200.
elif hasattr(e, 'code'):
print 'The server couldn\'t fulfill the request.'
print 'Error code: ', e.code
else:
# Retrieve a redirected URL, if there is one.
real_url = response.geturl()
print real_url
saved_to = get_local_path(real_url)
urlretrieve(real_url, saved_to)
# meta_data = response.info()['Content-Length']
# file_on_disk = os.stat(saved_to).st_size
# print '\nContent-Length: ' + meta_data
# print 'File on Disk after Download: ' + str(file_on_disk)
remove_partially_downloaded(real_url, response, saved_to)
urlcleanup()
return
def remove_partially_downloaded(url, response, local_path_to_file):
meta_data = response.info()['Content-Length']
file_on_disk = os.stat(local_path_to_file).st_size
print '\nContent-Length: ' + meta_data
print 'File on Disk after Download: ' + str(file_on_disk)
partial_download = int(meta_data) - file_on_disk
if partial_download > 0:
print '\nThe following partially downloaded file ' + get_filename_from_url(url) + ' will be removed'
os.remove(local_path_to_file)
else:
return
有格式的單元測試代碼中的問題,所以我重視我的單元測試類的形象,而不是在這裏
任何幫助表示讚賞。建議使用補丁和馬gicMock非常感謝。我知道這兩者的基本概念,但仍然無法弄清楚將這些內容合併到我的代碼中的位置。我對此很新。
非常感謝Guido!當我開始爲這個函數編寫測試時,我一直在嘲笑Request和Response對象。在我的測試中使用urlopener,因爲我發現堆棧溢出的另一個帖子表明這是嘲笑響應的方法。不管怎樣,再次感謝! :) – mopkaloppt