我试图在修补BeautifulSoup.select
时用assertRaises
测试一个异常
方法,该方法从网页获取ID,并接收html resultsPage
def parseOutIds(resultsPage):
soup = BeautifulSoup(resultsPage, "html.parser")
records = soup.select('some-html-tags')
parsed = []
for record in records:
try:
ampData = json.loads(record["other-tags"])
parsed.append(ampData)
except json.decoder.JSONDecodeError from err # Missing coverage
return parsed
上述辅助方法及试验。我提出ValueError
,因为json.decoder.JSONDecodeError
基于这个answer继承自它
def loadHtml(self, fileName):
with open('path/to/test'+filename) as f:
self.html = file.read().strip()
def test_parseOutIds(self):
self.loadHtml('test-html.html')
#errorMock method just raises ValueError exception
bsPatch = patch('bs4.BeautifulSoup.select', self.errorMock)
with bsPatch:
with self.assertRaises(ValueError):
parseOutIds(self.html)
我上面的当前测试缺少异常行的第页
其他要点:
您的代码中有一些误解:
ValueError
不会被except json.decoder.JSONDecodeError
子句捕获-您可以从json.decoder.JSONDecodeError
派生的类捕获对象,但不能从json.decoder.JSONDecodeError
捕获父类李>soup.select
调用在try
块之外,因此从soup.select
抛出的异常无论如何都不会被捕获李>现在,关于您的测试问题:我认为您可能不必修补任何东西来测试
parseOutIds
。您只需要为相应的测试用例提供适当的html输入。在您的例子中,您希望编写一个测试来覆盖异常部分。这意味着,所需的html输入将有一个记录包含无效的JSON数据。这将导致json.loads
抛出json.decoder.JSONDecodeError
相关问题 更多 >
编程相关推荐