Я пытаюсь настроить два разных макетированных объекта на основе предоставленных входных данных.
Общие определения интерфейса следующие:
public interface ISpecification<T>
{
Expression<Func<T, bool>> Criteria { get; }
List<Expression<Func<T, object>>> Includes { get; }
List<string> IncludeStrings { get; }
Expression<Func<T, object>> OrderBy { get; }
Expression<Func<T, object>> OrderByDescending { get; }
int Take { get; }
int Skip { get; }
bool IsPagingEnabled { get; }
}
Затем реализующий класс, имеющий три методаи происходит от промежуточного базового класса.
public sealed class WindFarmsSpecification : BaseSpecification<WindFarm>
{
public WindFarmsSpecification()
: base(null)
{
this.AddInclude("Submissions");
this.ApplyOrderBy(s => s.Name);
}
public WindFarmsSpecification(string name)
: base(s => s.Name.Contains(name))
{
this.AddInclude("Submissions");
this.ApplyOrderBy(s => s.Name);
}
public WindFarmsSpecification(Guid guidId)
: base(s => s.GuidId == guidId)
{
this.AddInclude("Submissions");
}
}
Базовая проверка этого проста как:
mock.Setup(m => m.ListAsync(It.IsAny<ISpecification<WindFarm>>()))
.Returns(() =>
{
var windFarms = new List<WindFarm>
{
testWindFarm1
};
return Task.FromResult((IReadOnlyList<WindFarm>)windFarms);
});
Что в порядке, пока мне все равно, что получить возврати абстрагируется от деталей. Однако теперь мне нужно позаботиться об этом.
Как мне изменить moq It.IsAny<ISpecification<WindFarm>>()
, чтобы я мог различать
public WindFarmsSpecification()
и
public WindFarmsSpecification(string name)