我有一个Web服务器,它返回包含以下内容的HTML:
<div class="well">
<blockquote>
<h2>Blueberry Pancakes Are Bomb</h2>
</blockquote>
</div>
我写了一个像这样的人为的功能测试:
def test_page_has_blueberry_in_blockquote(self):
# User goes to inspire_my_palate page
self.browser.get('http://localhost:8000/inspire_my_palate')
# He sees a blockquote with a header containing 'Blueberry ...'
food_text = self.browser.find_element_by_xpath('//div[@class="well"]/blockquote/h2').text
self.assertIs(food_text, u'Blueberry Pancakes Are Bomb')
当我运行测试时,我收到此错误:
(foodie_env)fatman:foodie$ python functional_tests.py
.F
======================================================================
FAIL: test_page_has_blueberry_in_blockquote (__main__.NewVisitorNavbar)
----------------------------------------------------------------------
Traceback (most recent call last):
File "functional_tests.py", line 179, in test_page_has_blueberry_in_blockquote
self.assertIs(food_text, u'Blueberry Pancakes Are Bomb')
AssertionError: u'Blueberry Pancakes Are Bomb' is not u'Blueberry Pancakes Are Bomb'
----------------------------------------------------------------------
Ran 2 tests in 6.656s
FAILED (failures=1)
我也尝试过:
self.assertIs(food_text, 'Blueberry Pancakes Are Bomb')
将字符串转换为unicode或不显示更改任何内容。我仍然得到相同的断言错误。
更新:如果我将断言测试更改为:
,我会通过测试self.assertEquals(food_text, u'Blueberry Pancakes Are Bomb')
但是,我仍然想知道assertIs()
测试失败的原因。我猜这是由于字符串在内存中的表示方式。直观地说,assertIs()版本应该通过,因为我比较了两种字符串类型。
断言错误不是很直观,而且令人困惑。什么可能导致这种奇怪的断言错误?
答案 0 :(得分:3)
尝试将if(file_exists("../media/books/$oldcover")) {
unlink("../media/books/$oldcover");
} else {
//do nothing
}
支票替换为:
assertIs
答案 1 :(得分:0)
为了更多地了解@ TomKarzes的答案,#include <map>
class Registry
{
template<class configclass>
std::map<std::wstring, configclass> enumerateSubKeys(std::wstring subKeyName);
}
正在评估两个对象。在以下代码中,两个字符串在内存中表示为两个不同的对象:
assertIs()
因此,这个断言会失败,因为这两个对象不会评估相同的东西。
另一方面,self.assertEqual(food_text, u'Blueberry Pancakes Are Bomb')
正在比较两个字符串的相似性,因此这个断言通过了。