class MyClass<T> where T : class
{
}
在這種情況下,where子句是執行一個規範,MyClass的僅是一個通用的引用類型的。
理想情況下,我應該有一個單元測試來測試這個規範。然而,這個單元測試顯然是行不通的,但它說明了什麼,我試圖完成:
[Test]
[DoesNotCompile()]
public void T_must_be_a_reference_type()
{
var test = new MyClass<int>();
}
我能做些什麼來測試由真實不允許代碼編譯執行的規範嗎?
編輯:
更多信息:好了,我的理由這樣做的(哈哈)是我一直在關注一個TDD的方法,在其中您不能寫任何代碼,除非你有一個單元測試失敗。假設你有這個:
class MyClass<T> { }
你可以寫什麼測試,除非T是一個類,否則會失敗?像default(T) == null
?
進一步編輯:
所以在這一個「根本原因分析」後,問題是,我是靠default(T)
這一類的消費是null
,以含蓄的方式。我能夠將消費者代碼重構爲另一個類,並在那裏指定一個通用類型限制(限制爲class
),如果有人要刪除我上面討論的類的限制,則該代碼將無法編譯。
爲什麼你不是單元測試該類被命名爲'MyClass'? – SLaks 2010-10-27 15:19:29
@SLaks:technically var test = new MyClass();會測試,不是嗎? –
2010-10-27 15:40:56
我認爲@SLaks使用諷刺來證明你不需要測試編譯器......這是微軟的工作。 – TheCloudlessSky 2010-10-27 15:58:50