【发布时间】:2014-01-16 17:41:13
【问题描述】:
我正在尝试使用 Visual Studio 2013 的内置工具对 .NET Web 项目进行单元测试。我已经使用 NuGet 添加了 Moq,但是如果不使用虚拟方法和/或接口重写整个项目,就无法测试控制器。所以我正在寻找一种方法来测试代码,而不用在现有的源代码中捣乱。
提前感谢您的帮助
【问题讨论】:
-
嗨!如果你不能重写代码,也许你不能进行正确的单元测试——不过我可能是错的。 也许 自动探索测试在这种情况下可能有用。您可以将 Selenium 与 Firefox / IE / Chrome 驱动程序一起使用。如果您选择这样做,您可以在代码中定义一些 UI 测试场景并...运行它们。顺便说一句,你为什么要测试网络控制器?只是问......不过,您可以测试它们所依赖的模块。通常,网络控制器是虚拟的和懒惰的,它们将传入的请求委托给其他更努力的模块:)
-
我不得不模拟控制器,因为它的构造函数依赖于我不想以任何方式改变的存储库(所以我模拟了) - 我想我可以返回并重构所有存储库以扩展接口,但我希望避免这种情况。我不想破坏任何东西
-
那么...只需将dynamic object :) 或ExpandoObject 传递给控制器。也许你可以这样欺骗他(它)。然后 DynamicObject 将充当假存储库。你怎么看待这件事?哎呀,现在我才意识到:(这行不通,对不起...
-
And... 作为最后的手段... 定义一个与您的存储库具有相同名称的虚拟类,相同的方法签名等,并在这里和那里添加一些编译标志。当您想要测试时,那些编译标志将“注释掉”真正的实现并使用虚拟实现。不过,这是一个非常糟糕的解决方案。
-
'Refactor / Extract Interface ...' 现在在 Visual Studio 中非常简单,并且它内置在 IDE 中。您需要创建多少个接口?
标签: c# unit-testing moq virtual