我知道一些ASP MVC,试图接受TDD。以下示例安装了xUnit和TestDriven(包括Moq)。
问题是我正在尝试模拟图像上传视图模型,因此我可以断言它正在上传。
Moq给了我一个问题:
非虚拟(在VB中可覆盖)成员的无效设置
尝试
时var imageMock = new Mock<ImageViewModel>();
imageMock.Setup(x => x.IsUrl).Returns(true);`
我不知道如何继续前进 - 为视图模型创建接口是无意义的,我是为网站编程,而不是为了测试环境。
我应该更换Mock环境还是定义界面或......?
请提供一些经验丰富,内容丰富的建议,请提供或至少提供良好的样本,以便建议我做什么。
谢谢!
答案 0 :(得分:1)
首先,这是一个汽车财产吗?
public bool IsUrl {get; set;}
如果是这样,只需在测试设置中自行设置值。如果它不是自动属性,将它移动到方法而不是属性更有意义。那时,您可以将方法设为虚拟(这是错误消息实际上说的内容。)
在模拟时,你不能模拟那些不是接口或不是虚拟的东西(我相信有一些付费的模拟库可以让你,但是FakeItEasy,Moq和其他人要求它是虚拟的。)
要做到这一点,您只需要使属性看起来像这样:
public virtual bool IsUrl {get; set;}
其次,您在视图模型上测试的是什么?测试getter和setter在很大程度上是浪费时间,因为它们很可能会在代码的其他地方进行测试。此外,对getter和setter的测试正在测试编译器,而不是代码。如果getter和setter在.NET中不起作用,那么你会遇到很多问题。最好测试视图模型的创建,然后确保它在创建后具有正确的值。