【发布时间】:2010-08-17 06:55:46
【问题描述】:
我正在阅读 Professional ASP.NET MVC 2 这本书,并且我正在尝试让第 1 章中的单元测试正常工作;但是,我遇到了一些非常奇怪的错误。
解决方案中有两个项目:NerdDinner 和 NerdDinner.Tests。
在 NerdDinner 项目中我有以下界面:
IDinnerRepository.cs
//...
namespace NerdDinner.Models
{
interface IDinnerRepository
{
//...
}
}
同样在 NerdDinner 项目中,我有以下类:
//...
using NerdDinner.Models;
//...
namespace NerdDinner.Controllers
{
public class DinnersController : Controller
{
IDinnerRepository dinnerRepository;
// Default constructor
public DinnersController() : this(new DinnerRepository()){} // DinnerRepository is another concrete implementation of IDinnerRepository
//Test constructor
public DinnersController(IDinnerRepository repository) {
dinnerRepository = repository;
}
}
}
在 NerdDinner.Tests 项目中,我有以下 IDinnerRepository 的具体实现:
//...
using NerdDinner.Models;
//...
namespace NerdDinner.Tests.Fakes
{
class FakeDinnerRepository : IDinnerRepository
{
//...
public FakeDinnerRepository(List<Dinner> dinners)
{
//...
}
//...
}
}
现在进行实际的单元测试(在 NerdDinner.Tests 中)
using NerdDinner.Controllers;
//...
using NerdDinner.Models;
using NerdDinner.Tests.Fakes;
namespace NerdDinner.Tests
{
[TestClass]
public class DinnersControllerTest
{
List<Dinner> CreateTestDinners()
{
//...
}
DinnersController CreateDinnersController()
{
return new DinnersController(new FakeDinnerRepository(CreateTestDinners()));
}
}
}
现在针对实际问题: 在 DinnerControllerClass 类的 CreateDinnersController 方法中,出现以下错误:
DinnersController.DinnersController(NerdDinner.Models.IDinnerRepository 存储库)(+ 1 个重载) 错误: 'NerdDinner.Controllers.DinnersController.DinnersController(NerdDinner.Models.IDinnerRepository)' 的最佳重载方法匹配有一些无效参数。
它让我可以选择在 DinnersController 中创建构造函数存根。它生成以下代码:
private global::NerdDinner.Tests.Fakes.FakeDinnerRepository repository;
//...
public DinnersController(global::NerdDinner.Tests.Fakes.FakeDinnerRepository repository)
{
// TODO: Complete member initialization
this.repository = repository;
}
即使在生成该代码之后,我仍然会遇到同样的错误。但是为什么我还需要那个代码呢?据我所知,我做的一切都是正确的。
谁能帮我弄清楚这里发生了什么?
编辑 生成的代码给出以下错误:
命名空间“NerdDinner”中不存在类型或命名空间“Tests”(您是否缺少任何程序集引用?)
【问题讨论】:
标签: c# asp.net unit-testing asp.net-mvc-2