Я новичок в Moq и TDD, и я пытаюсь настроить метод на интерфейсе репозитория.
Вот полная история.
У меня есть класс сущности домена под названием Tenant со свойством BusinessIdentificationNumber
public class Tenant:EntityBase<Tenant>,IAggregateRoot
{
...
public string BusinessIdentificationNumber {get;set;}
...
}
Далее у меня есть хранилище для этой сущности, интерфейс которого похож на
public interface IRepository<T>
{
...
T FindBy(Func<T,bool> func);
...
}
там, где проблема, я использую службу домена, которая содержит правила для создания арендатора и похожа на
public class TenantCreationService:ITenantCreationService
{
public TenantCreationService(IRepository<Tenant> tenantRepository){...}
public void CreateTenant(Tenant tenant)
{
//from here there is call to IRepository<Tenant>.FindBy(funcMethod);
}
}
И в модульном тестировании, где я тестирую TenantCreationService, я высмеиваю репозиторий, переданный конструктору, но я хотел бы протестировать функцию:
- если арендатор с BusinessIdentificationNumber уже существует в хранилище или сеансе, его следует вернуть.
Так что я пытался сделать это как
repositoryMock.Setup(x=>x.FindBy(It.Is<Tenant>(t=>t.BusinessIdentificationNumber
== _tenantInTest.BusinessIdentificationNumber))).Returns(_tenantInTest)
но он не компилируется. Вы знаете, что я хочу сделать?
EDIT:
когда я пытаюсь скомпилировать фрагмент ниже
repositoryMock.Setup(e => e.FindBy(t => t.BusinessNumber == _validTenant.BusinessNumber)).Returns(
_validTenant);
я получаю исключение
Unsupported expression: t => (t.BusinessNumber == value(DP.IPagac.UnitTests.DP.IPagac.Module.TenantManagement.TenantDomainServiceTests)._validTenant.BusinessNumber)