2013-01-25 54 views
3

我使用這個非常漂亮的迷你ORM,Simple.Data,設置大量的測試數據,快速和容易。 我真的想擴展它的斷言。例如我想斷言的計數:擴展Simple.Data與斷言

Db.MyTable.GetCount(); <- Returns a dynamic 

,這樣我可以評價或多或少像你這樣有FluentAssertions做。 它看起來是這樣的:

Db.MyTable.GetCount().ShouldBe(X); 

但是我發現這很難做到這一點不失去動力的優勢。

有沒有人有暗示這可以做到或者如果它甚至可能的原因內?

我目前穿越SRC在GitHub上試圖找到一種方法,我可以在本地執行此操作並impromptu玩弄周圍找路。

+0

我認爲這個問題需要明確的是,就編譯器而言,返回值來自GetCount()是動態的,所以擴展方法無法解析。 –

回答

2

可悲的是,沒有幸福的答案。動態和擴展方法不混合,由喬恩·S和埃裏克大號這裏解釋:Extension method and dynamic object

答案,在這個問題,要麼調用shouldBe這樣一個靜態方法:

AssertionExtensions.ShouldBe(Db.MyTable.GetCount(), 3); 

或該方法的返回值直列轉換爲已知類型:

((int)Db.MyTable.GetCount()).ShouldBe(3); 

或者,當你正在調查,用即興應用與getCount將方法MYTABLE的接口。我猜你已經看到了我在Simple.Data和Impromptu上的博客文章,但是如果你還沒有:http://blog.markrendle.net/2012/10/12/howto-dial-up-the-static-on-simple-data/

+0

謝謝你,是的,我已閱讀你的博客即興。內聯投射似乎是要走的路。我想知道爲什麼內聯轉換不會跨越我的想法...謝謝你的方式:)一個偉大的產品。 –

0

在正在創建的類中,爲什麼不創建自己的自定義斷言類並使正在創建的對象類從它們繼承。

public class MyClass : MyCustomExceptionClass 
{ 

} 

以這種方式,會更容易爲你測試的方式方法你想