【发布时间】:2014-01-23 20:55:24
【问题描述】:
如果我有一个 controller 这样做:
//MyController
public ActionResult MyMethod(string someString)
{
object test = new object();
(new MyClassA()).DoSomething(test);
return View();
}
我是否需要为此控制器创建一个constructor,以便我可以将MyClassA 的模拟版本传递给它?
//Test
Mock<IMyClassA> a = new Mock<IMyClassA>();
a.Setup(m => m.DoSomething(new object());
MyController controller = new MyController(a.Object);
【问题讨论】:
-
是的,除非你的控制器有默认构造函数。
-
所以我需要创建一个额外的构造函数只是为了测试?这是不好的做法吗?
-
有人会说你应该用第二种方式(使用构造函数的依赖注入的 IoC)不管你是否编写控制器测试,但如果你是的话,肯定是这样。
-
看起来您正在使用 Moq 进行模拟。您可以考虑使用不同的模拟库,例如 FakeItEasy (github.com/FakeItEasy/FakeItEasy),它支持轻松发送模拟参数。
标签: .net asp.net-mvc c#-4.0 mocking tdd