【问题标题】:Extending Simple.Data with assertions使用断言扩展 Simple.Data
【发布时间】:2013-01-09 10:02:26
【问题描述】:

我正在使用这个非常好的迷你 ORM,Simple.Data,来设置大量的测试数据,快速而简单。 我真的很想将它扩展到断言。例如我想断言计数:

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

这样我就可以或多或少地像您对 FluentAssertions 所做的那样进行评估。 它可能看起来像这样:

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

但我发现很难做到这一点不失去动态的优势

是否有人暗示如何做到这一点,或者在合理范围内是否可能?

我目前正在 GitHub 上遍历 src,试图找到一种可以在本地执行此操作的方法,并与 impromptu 玩弄以找到一种方法。

【问题讨论】:

  • 我觉得问题需要明确一点,就编译器而言,GetCount()的返回值是动态的,所以无法解析扩展方法。

标签: c# assertions simple.data fluent-assertions


【解决方案1】:

遗憾的是,对此没有满意的答案。正如 Jon S 和 Eric L 所解释的,动态和扩展方法不能混合使用:Extension method and dynamic object

与该问题一样,答案是要么将 ShouldBe 作为静态方法调用:

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

或将方法的返回值内联转换为已知类型:

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

或者,正如您正在调查的那样,使用 Impromptu 通过 GetCount 方法将接口应用于 MyTable。我猜你已经看过我关于 Simple.Data 和 Impromptu 的博文,但如果你没有看过:http://blog.markrendle.net/2012/10/12/howto-dial-up-the-static-on-simple-data/

【讨论】:

  • 谢谢你,是的,我在你的博客上读过关于即兴表演的文章。内联铸造似乎是要走的路。我想知道为什么内联转换甚至没有在我的脑海中浮现...顺便感谢您提供的出色产品 :)。
【解决方案2】:

在您正在创建的类中,为什么不创建自己的自定义断言类并让您正在创建的对象类继承自它们。

public class MyClass : MyCustomExceptionClass
{

}

这样,您可以更轻松地以您想要的方式测试方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    相关资源
    最近更新 更多