Unit tests entity framework
Выдает такую ошибку Сообщение: Сбой Assert.IsNotNull.
Подключил ссылку на свой проект, пытаюсь проверить создает ли он в бд запись, как сделать так чтобы заработало?
public class UnitTest1
{
[TestMethod]
public void TestMethod()
{
ZOOPARK db = new ZOOPARK();
Assert.IsNotNull(db.Staff.Where(user => user.Login_staff == "321" && user.Password_staff == "321").FirstOrDefault());
}
public void reg()
{
ZOOPARK db = new ZOOPARK();
string log = "321";
string passw = "321";
string Name = "Вася";
string Surname = "Пупкин";
string Patronymic = "Алёшкин";
string position = "Staff";
Staff regs = new Staff
{
Name = Name,
Surname = Surname,
Patronymic = Patronymic,
Position = position,
Login_staff = log,
Password_staff = passw,
};
db.Staff.Add(regs);
db.SaveChanges();
}
}
Ответы (1 шт):
Начнём с того, что Assert это просто статический класс с набором методов, которые брасают исключения в определённых ситуациях. Assert.IsNotNull(object value) это один из методов этого класса, который кидает исключение, если value является null. В этом вся суть тестового фреймворка: запустить код и "поставить галочку" напротив теста, если всё прошло гладко, без неожиданных исключений *, или же "поставить крестик", если всё пошло иначе.
Рассмотрим ваш класс UnitTest1. В нём есть один тестовый метод: TestMethod(). Для того, чтобы было проще его анализировать, я его переписал в более читаемом виде:
[TestMethod]
public void TestMethod()
{
var db = new ZOOPARK();
var record = db
.Staff
.Where(user => user.Login_staff == "321" && user.Password_staff == "321")
.FirstOrDefault();
Assert.IsNotNull(record);
}
Итак, сначала инициализируется объект db, что то по-типу базы данных. После инициализации, я полагаю, она пуста.
var db = new ZOOPARK();
Затем происходит поиск первой записи, для которой выполняется определённое условие. Так как база данных пуста, это условие, я уверен, не выполнится и в результате вы получите null.
var record = db
.Staff
.Where(user => user.Login_staff == "321" && user.Password_staff == "321")
.FirstOrDefault();
После это вызывается метод Assert.IsNotNull(record), который, очевидно, бросит исключение и тест будет не пройден.
Assert.IsNotNull(record);
Как я понимаю, вы ожидали, что тест будет пройден, так как у вас есть заполнение базы данных подходящими данными в методе reg(). Но вы не учли 2 момента:
- Вы нигде не вызываете метод
reg() - Метод
reg()работает с локальной переменнойdb, зона видимости которой ограничена методомreg()
Есть 2 решения:
- Перенести код заполнения
dbиз методаreg()в методTestMethod() - Вынести переменную
dbи сделать её полем классаUnitTest1, затем заменить инициализациюdbв методеTestMethod()на вызовreg()
*для простоты понимания, я опустил то, что некоторые тесты наоборот могут ожидать выброса исключения (ExpectedExceptionAttribute)