2013-03-26 88 views
2

我知道一些ASP MVC,试图拥抱TDD。以下示例安装了xUnit和TestDriven(其中包含Moq)。模拟图像上传视图模型

问题是我试图模拟一个图像上传viewmodel,所以我可以断言它正在上传。

起订量给我的问题:

无效的设置在非虚拟(VB中重写)成员

试图

var imageMock = new Mock<ImageViewModel>(); 
imageMock.Setup(x => x.IsUrl).Returns(true);` 

我不知道如何继续前进 - 为视图模型创建接口是无稽之谈,我正在为站点编程,而不是测试环境。

我应该替换模拟环境还是定义接口或...?

请给出一些经验丰富和翔实的建议,并请提供或至少喜欢良好的样品,你建议我做的。

谢谢!

回答

1

首先,这是一个汽车物业?

public bool IsUrl {get; set;} 

如果是这样,只需在您的测试设置中自行设置值即可。如果它不是自动属性,将它移动到方法而不是属性中会更有意义。在那个时候,你可以使方法变成虚拟的(这就是错误信息实际上说的东西)。

嘲笑时,你不能嘲笑那些不是接口或不是虚拟的东西(我相信有。一些有偿嘲笑,让你的库,但FakeItEasy,起订量等要求,它是虚拟的)

要做到这一点,你就只需要做出的财产是这样的:

public virtual bool IsUrl {get; set;} 

其次,你在视图模型上测试了什么?测试getter和setter在很大程度上是浪费时间,因为它们很可能会在代码的其他地方进行测试。另外,对getter和setter的测试正在测试编译器,而不是你的代码。如果getter和setter不能在.NET中工作,你会遇到很多问题。最好测试视图模型的创建,然后确保它在创建后具有正确的值。

+1

这是一个汽车财产,它只是使用该死的对象,为什么嘲笑它很好的抓住? :)你完全正确......我只是看着这些例子,被他们带走,人们嘲笑一切,我认为它的方式。我没有测试getter/setters,我没有向MS支付他们的CLR和.NET框架。我测试的是,我提到的图像实际上是通过上传它们的方法上传的。让我做你说过的话(这一切都有道理),我会回来。感谢您的及时响应! – 2013-03-26 21:57:37