Я хочу написать UnitTest с Moq 4.14.7. Тестируемый метод заключается в следующем:
public IFoo Get(Guid id)
{
Func<IFoo> getData = () => _repository.Get(id);
if (_cache.TryGetAndSet(vaultId, getData, out var result))
{
return result;
}
}
Чтобы кратко объяснить. У меня есть общий класс кеша. Он проверяет в кеше, существует ли сущность с переданным guid. Если это не так, вызывается репозиторий.
Теперь у меня есть следующие настройки для кеша:
_cache.Setup
(
x => x.TryGetAndSet
(
_vaultId,
It.IsAny<Func<IFoo>>(),
out foo
)
)
.Returns(true);
Тест пока работает, но 100% покрытия я им не добиваюсь, потому что не покрыта функция.
Есть ли лучший способ, чем работать с It.IsAny
и получить 100% покрытие?
GetData
-func наверняка никогда не выполняется - и, следовательно, не покрывается - потому что вы издеваетесь над единственной вызывающей функцией -TryGetAndSet
. - person HimBromBeere   schedule 18.01.2021_repo.Setup(x => x.Get(id)).Returns(It.IsAny<IFoo>);
раньше, он все равно не будет вызван, потому что у меня естьIt.IsAny<Func<IFoo>>()
в макете кеша. - person BenGeba   schedule 18.01.2021TryGetAndSet
чем-то совершенно другим, который вообще не будет касаться делегата. - person HimBromBeere   schedule 18.01.2021It.IsAny<>
a() => _repository.Setup(m => m.Get(id)).Returns(foo)
, но он ожидает IFoo в качестве возвращаемого значения, но получает репо. - person BenGeba   schedule 18.01.2021