Я работаю над книгой 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()));
}
}
}
А теперь для актуальной проблемы: в методе CreateDinnersController в классе DinnerControllerClass яполучая следующую ошибку:
DinnersController.DinnersController (репозиторий NerdDinner.Models.IDinnerRepository) (+ 1 перегрузка (и)) Ошибка: лучший перегруженный метод соответствует для 'NerdDinner.Controllers.DinnersController.DinnersController.DinnersController.DinnersController.DinnersController.DinnersController.DinnersController.DinnersController.DinnersController.DinnersController.DinnersController.DinnersControllerNerdDinner.Models.IDinnerRepository) 'содержит недопустимые аргументы.
Это дает мне возможность cсоздайте заглушку конструктора в DinnersController.Он генерирует следующий код:
private global::NerdDinner.Tests.Fakes.FakeDinnerRepository repository;
//...
public DinnersController(global::NerdDinner.Tests.Fakes.FakeDinnerRepository repository)
{
// TODO: Complete member initialization
this.repository = repository;
}
Даже после генерации этого кода, я все еще получаю ту же ошибку.Но зачем мне вообще нужен этот код?Насколько я могу судить, я все делаю правильно.
Кто-нибудь может мне помочь разобраться, что здесь происходит?
Редактировать Сгенерированный код даетследующая ошибка:
Тип или пространство имен 'Тесты' не существует в пространстве имен 'NerdDinner' (вам не хватает какой-либо ссылки на сборку?)