2012-07-30 50 views
1

我有一個單獨的類庫,用於所有單元測試(使用nunit)。在測試項目中,我有一個幫助程序類爲我創建測試對象。設置這些對象時,我需要設置一些我標記爲內部的值。我這樣做的原因是因爲這些對象實際上是工作流程的一部分,所以我只能通過實際上經歷工作流程來實現這些屬性狀態,這種方式殺死了單元測試的想法。當這些狀態是內部屬性時,如何使用單元測試創​​建測試狀態?

例如,我首先測試的方法。它會檢查是否進行了某項審批,如果確實通過,則會將其移至鏈中的下一個步驟(或者說,它會檢查是否收到了下一個批准,以此類推)。如果不是,則將其重新分配給需要批准的人員。

因此,我所做的是創建一個處於這個過程的某個階段的測試票據。例如,第一次測試運行第一批准人未批准的方法,並進行檢查以確保將其重新分配給該人員。下一個測試將在批准者HAS批准的地方運行,並確保它在樹上向下移動。

我明顯面對的問題是測試類位於不同的命名空間,所以我不能擊中內部屬性。我不確定是否有這方面的解決方案,或者如果我錯過了一些支持我進入這個角落的其他基礎知識(設計氣味?)。我意識到你通常只想爲公共api編寫測試,但是我的部分測試要求我對私有字段進行一些設置。

有什麼建議嗎?

+2

InternalsVisibleTo是快速解決方案 - 認爲你是對的,這是一種設計氣味。這聽起來像也許改變到一個狀態機或戰略模式會更好的設計,但它聽起來好像是邊際。你必須在將來改變這一點,並可能需要引入新的步驟,然後改變**可能會值得。 – 2012-07-30 16:33:27

回答

3

您可以利用InternalsVisibleTo屬性來指定您的UnitTest程序集可以訪問該類的內部屬性。

這使您的測試和'真正'組裝緊密結合,但這應該會讓您工作。