Является ли тест детерминированным, как написано?Это зависит от того, как вы интерпретируете «детерминистический».Обычно, когда вы запускаете набор модульных тестов, тестовый прогон выдает различную статистику о тестовом прогоне, например, когда он был выполнен, сколько времени он занял и так далее.При рассмотрении на этом уровне никакие тестовые наборы никогда не будут детерминированными.
Если, с другой стороны, вы ссылаетесь на детерминизм, связанный с тестами , поскольку Мартин Фаулер обсуждает его , вышеуказанный тест может быть «достаточно детерминированным».Это, в конечном счете, зависит от предполагаемой реализации SUT.
Автофиксирование при создании случайных значений разработано с намерением, чтобы оно создавало контрольные примеры, которые все попадают в один и тот же Класс эквивалентности .В этом конкретном случае он никогда не создает пустые списки, но если вы хотите сделать это явным в своем тесте, вы всегда можете добавить Guard Assertion :
var employeeAccountsReturn = new Fixture().CreateMany<Contracts.EmployeeAccount>();
// Guard Assertion:
Assert.NotEmpty(employeeAccountsReturn);
mockEmployeeRepo
.Setup(employeeRepo => employeeRepo.GetEmployeeAccountsByEmployeeAccountId(It.IsAny<int>()))
.Returns(employeeAccountsReturn);
Вы также можете сделатьболее очевидно, что вы создаете коллекцию с использованием метода CreateMany
:
var employeeAccountsReturn = new Fixture().CreateMany<Contracts.EmployeeAccount>();
В этом конкретном случае, будет ли иметь значение, если коллекция будет пустой?Разве тест не пройдет?Не так ли?