Я новичок в Moq, и я хотел бы написать модульные тесты, используя его. У меня есть база данных с несколькими таблицами, например:
EducationUser | Application
- UsrName - Student
- UsrPwd - CourseId
- UsrChallenge - Date
- IsTeacher - Grade
- FullName
Это база данных на localdb
, над которой я хочу издеваться. Я создал объекты с помощью Entity Framework. Интерфейс этих сущностей IEducationEntities
.
Теперь я хотел бы создать фиктивный объект и протестировать некоторые веб-службы, например:
[TestMethod()]
public void LoginTest()
{
HttpResponseMessage response = Request.CreateResponse(_accountController.Login("andrew", "DefaultPassword"));
Assert.IsTrue(response.IsSuccessStatusCode, "User unable to log in with correct login info");
}
Для этого, как я понял из документации, я должен в состоянии сделать что-то вроде:
[TestClass()]
public class AccountControllerTests : ApiController
{
Mock<IEducationEntities> _entities = new Mock<IEducationEntities>(MockBehavior.Strict);
private AccountController _accountController;
public AccountControllerTests() {
_accountController = new AccountController(_entities.Object);
_entities.Setup(table => table.EducationUsers.UsrName).Returns("andrew");
_entities.Setup(table => table.EducationUsers.UsrPwd).Returns("DefaultPassword");
}
[TestMethod] //etc, defining tests below
Однако это вообще не работает, поскольку сущности, сгенерированные из базы данных, по-видимому, не содержат информации о подполях, и я получаю сообщение об ошибке:
«DbSet» не содержит определения для «UsrPwd», и не удалось найти метод расширения «UsrPwd», принимающий первый аргумент типа «DbSet» (вам не хватает директивы using или ссылки на сборку?)
Что мне не хватает? Как заполнить объект moq
тестовыми данными, имеющими ту же структуру, что и моя база данных?
UsrPassword
, но вы называете егоUsrPwd
в своем тестовом/фиктивном коде. - person Ben Rubin   schedule 20.05.2017