Как правило, вы должны стремиться иметь только одно логическое утверждение на тест. Отличная книга xUnit Test Patterns содержит хорошее обсуждение этого вопроса, но существенным моментом является то, что он облегчает понимание того, где происходит нарушение, если есть только одна причина, по которой тест может не пройти. Это, вероятно, более актуально для регрессионного тестирования, чем BDD, хотя ...
Все это подразумевает, что ваш вариант написания одного теста, который проверяет все свойства, вероятно, наименее привлекателен, хотя вы могли бы утверждать, что проверка всех свойств - это одно логическое утверждение ...
Более центральным принципом xDD (TDD, BDD и т. Д.) Является то, что тесты должны действовать как Исполняемые спецификации . Другими словами, это должно быть сразу видно, когда вы смотрите на тест не только что тестируется , но также почему ожидаемое значение такое, как есть. В ваших примерах не очень понятно, почему ожидается, что SUT.FirstName будет "Джон", а не, скажем, "Джейн".
Если это вообще возможно, я бы написал эти тесты, чтобы использовать Производные значения вместо жестко заданных значений.
Для доступных для записи свойств я часто пишу тесты, которые просто проверяют, что получатель возвращает значение, присвоенное установщику.
Для свойств, доступных только для чтения, я часто пишу тесты, которые проверяют, что значение соответствует аргументу конструктора.
Такие тесты могут быть инкапсулированы в повторно используемый тестовый код, который инкапсулирует общие тестовые идиомы. В настоящее время я работаю над библиотекой , которая может сделать именно это .