2010-09-01 187 views

回答

6

assert result.file == file, "%s != %s" % (result.file, file,)

這就是爲什麼醜陋self.assert<Foo>方法unittest.TestCase,而不是介紹好和短斷言:self.assert<Foo>方法知道如何顯示故障信息。

順便說一句,我還以爲鼻子做了一些黑魔法所以在簡單的情況下

assert a == b

應該表現出有意義的錯誤消息。

+0

謝謝,我應該使用self.assert。你可以讓鼻子用-d顯示更多信息。它將顯示類型,但不顯示實際值。 – Pickels 2010-09-01 19:20:14

+1

只要注意你爲什麼說他們很醜。括號並沒有== ...惡作劇。 – Pickels 2010-09-01 19:29:24

+0

@Pickels現在你可以使用[pytest](http://doc.pytest.org/en/latest/)。它鼓勵裸露的聲明,但執行一些代碼分析來優化失敗輸出,因此您可以獲得兩全其美的好處。 – augurar 2017-01-11 02:29:25

22

您應該運行nosetests -d這將顯示在assert中比較失敗的對象的值。

+2

這應該是被接受的答案。 – ford 2013-11-20 18:01:00

+0

不,它仍然是「 .uidNumber == 1001」而不是類似於「預計1001,得到了1002」 – badbishop 2017-01-09 15:14:52

1

另一種可能性:定義自己的函數,它的伎倆:

def assert_eq(obt, exp): 
    assert obt==exp, "\n*Expected:\n%s\n*Obtained:\n%s" % (exp, obt) 

你可以調用它,而不是assert

assert_eq (self.data['SQ'].code, "SQ") 

這將返回這個漂亮的錯誤:

AssertionError

+0

超級!我想知道,如果你添加第三個參數 - 測試描述,那就是 - 你甚至不需要爲每個簡單測試定義一個單獨的方法,對嗎?基本上,它看起來像來自Test :: More的Perl的ok()方法。 – badbishop 2017-01-09 15:45:36

+0

@badbishop我描述的方法可以適用於所有的測試。但是,可以通過在消息中添加第三個參數來定製它(可以使用默認消息作爲我所描述的參數進行選擇)。 – 2017-01-11 04:52:30