2011-12-20 53 views
4

我最近開始在我的項目中編寫單元測試,並注意到所有assert語句都有消息參數。如何編寫好的單元測試消息

什麼使單元測試的好消息?

$cache->set('foo', 3); 
$this->assertEquals($cache->get('foo'), 3, 'what should i say?'); 

謝謝!

+0

在這種特殊情況下:「foo在緩存中的價值是3」(儘管如果我們知道_why_的更多信息,您預期它會是3,這將是答案的必要部分)。一般來說,做一個積極的陳述,說你正在測試的情況。 (另請參閱http://stackoverflow.com/questions/1074928/should-the-junit-message-state-the-condition-of-success-or-failure。) – 2011-12-20 03:22:45

回答

1

狀態下測試的事實。

考慮:

$this->assertEquals($person->age, 21, "Age is 21") 

VS:

$this->assertEquals($person->age, 21, "Age of person born on 1990-12-20"); 

一個好的單元測試消息應該幫助您快速猜出這些錯誤是。壞的一個會讓你花更多的時間狩獵。

+2

當然,明年的年齡變化;) – holygeek 2011-12-20 03:35:05

+0

@ holigeek所以哪一個更好? ''' $ this-> assertEquals($ person-> age,21,「Age is 21」) ''' 此消息只是重複assert語句。基本上,不增加任何價值 – tiengtinh 2017-09-20 04:31:12

1

我通常會保持他們的好和短 - 只是什麼被測試。這個信息不必解釋所有可能出錯的事情的故事,只需要將讀者指向正確的初始方向即可。測試應該足夠清楚,他們可以從那裏弄清楚。

一般來說,我寫我的消息,以便不熟悉測試的人至少有一點上下文,並且更好地瞭解測試的人可能會確切知道哪裏出了問題(或者至少在哪裏測試出錯了)。

在上面的例子中,我會說「緩存爲'foo',」這樣的消息會回來'緩存爲'富'預期3,但是67「。對於熟悉測試的人來說,這將比「預期的3」更有用,但在測試abc的123行中是67。

(我主要是Java開發人員,所以我說,好像這是JUnit的。我想PHPUnit的或不管它被稱爲大致相同的方式工作)