【发布时间】:2012-08-01 21:24:56
【问题描述】:
我正在处理这个 WebAPI 项目,我需要为它创建单元测试。该项目的基础是使用 VS 2010 创建的,然后添加了一个 WebApi 模块。
控制器的工作方式有点妨碍测试/模拟。我正在使用 xUnit 和 Moq ,但绝对没有必要坚持使用这两个。
应用程序使用特定对象来处理数据库访问,所以我有 controllerObject 及其构造函数需要 DataAccessObject
我在模拟控制器/数据访问对时遇到问题。我尝试运行的第一个测试是 GetAllFromDataBase,但我真的不知道如何去做。
编辑:
我按照 Cuong Le 告诉我的去做了,现在整个人都在动,我真的很感激。但我遇到了另一个问题。要访问 API,有一个用户名/密码对,我的控制器使用 Thread.CurrentPrincipal.Identity.Name;我猜现在我需要设置这个值才能让它完全工作。
还有 valueServiceMock.Setup(service => service.GetValues()) .Returns(new[] { "value1", "value2" });
似乎没有工作。当代码尝试访问数据库时,由于无法获取要查找的有效用户名,因此一无所获
【问题讨论】:
-
你不应该模拟控制器,你会模拟控制器需要的服务。如果你在嘲笑控制器,你就不会在测试控制器。这就是重点。看看这个帖子:peterprovost.org//blog/2012/06/16/…
-
您是否检查过您是否通过构造函数传递了模拟对象,如下所示:var controller = new ValuesController(valueServiceMock.Object);
标签: c# unit-testing asp.net-web-api moq xunit