Я работаю над модульным тестом и хочу убедиться, что фиктивный объект получил правильный аргумент предиката. Однако я не могу заставить его работать.
Вот скелет кода:
public interface IRepository<T>
{
Task<T> SingleOrDefaultAsync(Expression<Func<T, bool>> predicate);
}
public class MyClass
{
private readonly IRepository<Foo> _repository
public MyClass(IRepository<Foo> repository)
{
_repository = repository;
}
public Task<bool> MyMethod(int id)
{
var foo = _repository.SingleOrDefaultAsync(x => x.Id == id);
return foo != null;
}
}
, и в моем тестовом классе у меня есть следующий метод
public async Task MyTestMethod()
{
var repository = Substitute.For<IRepository<Foo>>();
repository.SingleOrDefaultAsync(x => x.Id == 123).Returns(Task.FromResult(new Foo()));
var myClass = new MyClass(repository);
var result = await myClass.MyMethod(123);
result.Should().BeTrue();
}
Но, как уже упоминалось выше, этот тест не пройден. Я мог бы сделать это, используя Arg.Any<Expression<Func<Foo, bool>>
, но это не правильно.
У кого-нибудь есть предложение, что я делаю неправильно?