模拟一个大的 Partial Class

Mock a large Partial Class

我想对具有 3 个数据库调用的 Controller 方法进行单元测试。但是每次数据库调用都是通过询问一个大的Partial Class文件来完成的,这个文件的名字是DAL。 Dal class 有大约 70 种方法!我是否必须创建一个具有 70 个方法的接口,DAL class 可以使用?所以我可以用模拟来切换它?或者是否有更好的解决方案来模拟这个 DAL class?

拥有一个巨大的 class 和 70 个方法必然会产生这样的问题。无需重构您的 DAL class,例如在较小的存储库中,您可以使用每个控制器所需的少数方法创建较小的接口,并让您的 DAL class 实现许多这些较小的接口。然后你可以只模拟你想要的接口,让你的控制器也依赖于这个接口。

它可能看起来像:

interface A {
    void DoAThing();
}
interface B {
    void DoBThing();
}
class Mock : A {
    public void DoAThing() {
        //fake it till you make it       
    }
}
class DAL : A, B {
    //Way too many methods here
}

有一个名为 Moq(mock-u 或 mock)的免费 C# 模拟库,可以通过 Nuget 获取。它允许使用 lambda 表达式和各种验证调用进行非常强大的模拟控制。您不需要指定比您需要的更多的方法定义,并且每个方法的行为都可以在每次调用时完全改变。

https://www.nuget.org/packages/moq/

https://github.com/Moq/moq4/wiki/Quickstart

我个人可以保证 Moq 非常棒。