Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟一个大的局部类_C#_Unit Testing_Mocking_Partial Classes - Fatal编程技术网

C# 模拟一个大的局部类

C# 模拟一个大的局部类,c#,unit-testing,mocking,partial-classes,C#,Unit Testing,Mocking,Partial Classes,我想对具有3个数据库调用的控制器方法进行单元测试。但是每个数据库调用都是通过询问一个很大的部分类文件来完成的,该文件名为DAL。Dal类有70种方法!我是否必须制作一个包含70个方法的接口,DAL类可以使用它;这样我就可以用模拟来切换了?还是有更好的方法来模拟这个DAL类?拥有一个包含70个方法的大型类肯定会产生这样的问题。无需重构DAL类,例如在较小的存储库中,您可以使用每个控制器所需的少量方法创建较小的接口,并让DAL类实现许多较小的接口。然后,您可以只模拟您想要的接口,并让您的控制器也依赖

我想对具有3个数据库调用的控制器方法进行单元测试。但是每个数据库调用都是通过询问一个很大的部分类文件来完成的,该文件名为DAL。Dal类有70种方法!我是否必须制作一个包含70个方法的接口,DAL类可以使用它;这样我就可以用模拟来切换了?还是有更好的方法来模拟这个DAL类?

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

它可能看起来像:

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
}

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

它可能看起来像:

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
}

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


我个人可以保证Moq是惊人的。

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


我个人可以保证Moq是令人惊奇的。

如果你采用接口方式,你可以制作几个小接口,让DAL实现所有接口。通过这种方式,您可以对依赖项和单元测试进行“分类”。与其使用分部测试,不如从DAL类派生并为控制器方法实现自己的特定接口。这样,您可以访问这两个世界,但仍然可以模拟所需的部分,而不必担心DAL类。因此,您可以使用VisualStudio提取您的巨型接口,然后只模拟您希望在测试用例中调用的方法。如果您按照接口的方式,您可以制作几个小接口,并让DAL实现将它们全部调用。通过这种方式,您可以对依赖项和单元测试进行“分类”。与其使用分部测试,不如从DAL类派生并为控制器方法实现自己的特定接口。这样,您可以访问这两个世界,但仍然可以模拟所需的部分,而不必担心DAL类。因此,您可以使用VisualStudio提取巨大的界面,然后只模拟您希望在测试用例中调用的方法。是的,我支持Moq(有很多不同的模拟框架可用,但我绝对最喜欢Moq)。顺便说一句,我认为您应该在回答中添加一些关于如何通过
Edit | Refactor | extract interface
)使用Visual Studio从类中自动提取接口的内容。谢谢。我会在有时间的时候查看Moq。是的,我支持Moq(有很多不同的模拟框架可用,但我肯定最喜欢Moq)。顺便说一句,我认为您应该在回答中添加一些关于如何通过
Edit | Refactor | extract interface
)使用Visual Studio从类中自动提取接口的内容。谢谢。当我有时间的时候,我会检查最小起订量。