我們正在開發類似規格書的框架(如MSpec,NSpec等),並希望在運行時區分規範類中的方法:區分方法返回類型
public class AccountSpecs
{
private Account sut; // subject under test
Given an_account() { sut = new Account(); }
When changing_owner()
{
var result = sut.ChangeOwner("new owner");
It["returns_previous_owner"] =() => result.ShouldBe("old owner");
}
}
正如你可以看到這個類不可編譯,因爲an_account()和changing_owner()沒有返回語句。
Q1:我猜在C#中絕對沒有辦法指定如果沒有給出return語句,默認情況下使用「return null」?由於沒有全局類型別名(類似typedef When as System.Void
),我們不得不實際引入類Given和When,並強制用戶返回此方法中的某些內容。
我們在When.ENABLED
或When.DISABLED("reason")
的When方法中使用return語句來臨時禁用規範。
在「給定方法」中,我們想要返回待測主題。我們要啓用以下:
Given an_account() { sut = new Account(); return sut; }
不過:「無法轉換表達式類型...返回類型...」
接下來,我們想到了一個隱式轉換操作符的任何對象考慮,然而,這在C#中是不允許的,請參閱:cs0553 user-defined conversion from base class not allowed
Q2:那麼是否有任何解決方法可以使此工作或返回類型區分概念註定要失敗?
這聽起來像你需要設計你自己的語言。 –
還有其他人這樣做了,例如但是,SpecFlow認爲創建我們自己的DSL大大降低了用戶對框架的接受度。 –
請做你的未來的自己一個忙,並選擇更好的類名(當/給/應該),否則你後[默認?](http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx) – Sayse