Имейте в виду, что здесь вы имеете дело только с классами POCO - не происходит никакой магии, которая позволила бы сбою конструкции класса Agent
только потому, что вы поместили пользовательский атрибут в одно из его свойств.
Платформа сущностей проверяет наличие пользовательских атрибутов во время проверки и сопоставления данных - в этом случае она проверяет атрибут Required
и объявляет сущность как «действительную», если соответствующее строковое свойство не равно нулю итакже он сопоставит имя с необнуляемым столбцом в базе данных.
Чтобы отразить, что вы могли написать пользовательскую процедуру проверки в модульном тесте, которая выполняет те же проверки, т.е.что все свойства, которые украшены атрибутом Required
, действительно имеют значение, то есть что-то вроде этого:
[TestMethod()]
public void AgentWithNoNameIsInvalid()
{
Agent target = new Agent();
Assert.IsFalse(IsValid(target));
}
Это похоже на то, что вы сейчас тестируете EF, а не свой код.
Поскольку идентификатор является вашим первичным ключом, он будет назначен только тогда, когда объект будет зафиксирован в базе данных.Так что да, для полного тестирования вы должны будете смоделировать единицу работы и контекст, который делает это и для вас.Хотя есть много подводных камней и тонких (и не очень тонких) различий между IQueryable<T>
и IEnumerable<T>
, которые делают этот подход очень хрупким.
Лично я бы рекомендовал вам провести интеграционное тестирование с EF на основе отдельного тестабазу данных с известным содержанием и напишите свои модульные тесты и ожидаемые результаты на основе этой тестовой базы данных - это может быть не совсем TDD, но я обнаружил, что это единственный способ убедиться, что я проверяю правильные вещи.