假设我想从一个特定的网站上抓取“长”的帖子。为此,我创建了以下类:
import requests
class PostScraper:
THRESHOLD = 100
def __init__(self, thread_id):
self.url = 'foo.bar/thread-%s?pg=last' % thread_id
def get_long_posts(self):
page = requests.get(self.url)
soup = BeautifulSoup(page.content, 'html.parser')
posts = soup.find_all('div', 'post-text')
return [post if len(post.text) > THRESHOLD for post in posts]
我想为此编写一个单元测试,但我不知道如何正确地进行。。。我在想象这样一条伪Python:
def test_getting_long_posts():
scraper = PostScraper(None) # <- Not sure what to pass in. Advice?
stub = {'text': '<html></html>', 'status': '200'}
bind(url=scraper.url, response=stub)
posts = scraper.get_long_posts()
assert.equals(len(posts), 0)
我对单元测试有些陌生,尤其是Python。这种方法有意义吗?我该怎么办?你知道吗
编写类时最好将获取url文本内容的过程与扫描文本以获得合适帖子的过程分开。你知道吗
这样,您就可以用已知数量的合适帖子创建自己手工制作的html文本,并测试函数是否准确地找到了该数量。你知道吗
这将是实现分离的一种方法:
在测试代码时,您根本不会调用
fetch_page()
,而是可以直接将self.content
指定为您创建的任何虚假页面内容。你知道吗相关问题 更多 >
编程相关推荐