有没有一个.NET/C#mocking框架不';不需要虚拟方法

有没有一个.NET/C#mocking框架不';不需要虚拟方法,c#,unit-testing,moq,virtual,C#,Unit Testing,Moq,Virtual,我正在尝试使用Visual Studio 2013的内置工具对.NET web项目进行单元测试。我已经用NuGet添加了Moq,但是如果不使用虚拟方法和/或接口重写整个项目,就无法测试控制器。因此,我正在寻找一种在不影响现有源代码的情况下测试代码的方法 提前感谢您提供的任何帮助也许可以查看FakeiTasy:因为您使用的是VS2013,所以您可以利用Microsoft Fakes和Shimmers。有关更多详细信息和用法,请参见当前能够进行“提升”模拟的三个库: (399美元) (399欧元/

我正在尝试使用Visual Studio 2013的内置工具对.NET web项目进行单元测试。我已经用NuGet添加了Moq,但是如果不使用虚拟方法和/或接口重写整个项目,就无法测试控制器。因此,我正在寻找一种在不影响现有源代码的情况下测试代码的方法


提前感谢您提供的任何帮助

也许可以查看FakeiTasy:

因为您使用的是VS2013,所以您可以利用Microsoft Fakes和Shimmers。有关更多详细信息和用法,请参见当前能够进行“提升”模拟的三个库:

  • (399美元)
  • (399欧元/年)

  • (5999美元-需要>>与企业版相比我猜这仅适用于ultimate Edition Per,它适用于ultimate和Premium(无论是什么版本)版本我认为Fakes框架中的垫片是您的选择(显然,如果您拥有正确的许可证)但是,对您拥有的代码使用填隙片并不是一个好的做法。我建议您最终将代码更改为使用接口/虚拟方法。您好!如果您无法重写代码,可能无法进行适当的单元测试-尽管我可能错了。在这种情况下,自动探索测试可能会很有用。您可以使用Selenium with Firefox/IE/Chrome驱动程序。如果您选择这样做,您可以在代码中定义一些UI测试场景并…运行它们。顺便问一下,您为什么要测试web控制器?只是问一下…您可以测试它们所依赖的模块。但是,通常,web控制器是虚拟的和懒惰的,它们会将传入的请求委托给其他人r、 更努力的模块:)我不得不模拟控制器,因为它的构造函数依赖于一个我不想以任何方式改变的存储库(所以我模拟了)——我想我可以回去重构所有存储库以扩展接口,但我希望避免这种情况。我不想破坏任何东西。。。只需传递控制器a:)或ExpandooObject。也许你可以这样欺骗他。然后,DynamicObject将充当假存储库。你觉得这个怎么样?哦,直到现在我才意识到:(这不起作用,抱歉……而且……作为最后的手段……定义一个与您的存储库具有相同名称、相同方法签名等的虚拟类,并在这里和那里添加一些编译标志。当您要测试时,这些编译标志将“注释掉”真正的实现并使用虚拟的实现。不过,这是一个相当baaad的解决方案。“重构/提取接口…”现在在Visual Studio中非常容易,并且内置到IDE中。您需要创建多少个接口?感谢您的想法;遗憾的是,Fakeitesy还要求所有内容都是虚拟的或从接口扩展而来。@eggsh那好吧,对不起。我还没用过它,但前几天还在读有关它的书。