2009-03-03 65 views

回答

15

您可以編寫測試,指定頂級類的外部接口的行爲。該類是否使用內部類來實現該行爲,是該類的實現細節,並且測試不需要知道任何關於它的內容。

如果內部類無法通過頂層類的接口進行充分測試,那麼通常最好將內部類移出並直接作爲新的頂級類進行測試。想要測試內部類是一種代碼異味,內部類可能足以成爲頂級類。

1

當使用MS Visual Studio進行單元測試時,您只需創建一個private Accessor即可。內部它與我認爲的反射一起工作。只要看看生成的代碼。

2

你不直接測試它。它將通過它定義的類來測試。

而且,如果您應用TDD,就像這個問題標籤目前所暗示的那樣,您只是爲那個內部類編寫這個調用的測試是什麼?我的意思是說它不是一個標準的班級,由你正在從事的班級私人擁有?

1

我們使用了一個輔助類,它使用反射來加載和調用內部類的方法。也可以使用DEBUG符號如

#if DEBUG 
public 
#else 
internal 
#endif 
    class MyInternalClass 
{ 
    ... 
} 

然而艾司科Luontola的答案是比較正確的,因爲它是功能或業務需求,哪些是最重要在編譯時改變可訪問性。代碼覆蓋率過於集中而不是測試重要的風險領域很容易。

5

不是我推薦它,但你也可以使用InternalsVisibleToAttribute

+0

你說你不會推薦這一點,但你會如何你解決這樣的事情? http://stackoverflow.com/questions/15440935/how-to-test-internal-class-library – 2013-03-18 10:17:02

+0

@Thomas:正如Esko在他的回答中所述。您可以通過公共接口間接測試內部API,也可以將您的內部API升級爲公開並直接對其進行測試。 – 2013-03-18 10:39:30