Saya ingin menulis UnitTest dengan Moq 4.14.7. Cara yang akan diuji adalah sebagai berikut:
public IFoo Get(Guid id)
{
Func<IFoo> getData = () => _repository.Get(id);
if (_cache.TryGetAndSet(vaultId, getData, out var result))
{
return result;
}
}
Untuk menjelaskan secara singkat. Saya memiliki kelas cache generik. Ia memeriksa di cache apakah ada entitas dengan panduan yang diteruskan. Jika hal ini tidak terjadi, repositori akan dipanggil.
Sekarang saya memiliki pengaturan berikut untuk cache:
_cache.Setup
(
x => x.TryGetAndSet
(
_vaultId,
It.IsAny<Func<IFoo>>(),
out foo
)
)
.Returns(true);
Tes ini berhasil sejauh ini, namun saya tidak mencapai cakupan 100% karena fungsinya tidak tercakup.
Apakah ada cara yang lebih baik selain bekerja dengan It.IsAny
dan mendapatkan cakupan 100%?
GetData
-func asli Anda pasti tidak pernah dijalankan - dan karenanya tidak tercakup - karena Anda mengejek satu-satunya fungsi pemanggil -TryGetAndSet
. - person HimBromBeere   schedule 18.01.2021_repo.Setup(x => x.Get(id)).Returns(It.IsAny<IFoo>);
sebelumnya, masih tidak dipanggil, karena saya memilikiIt.IsAny<Func<IFoo>>()
di cache tiruan. - person BenGeba   schedule 18.01.2021TryGetAndSet
dengan sesuatu yang benar-benar berbeda yang tidak akan pernah menyentuh delegasi sama sekali. - person HimBromBeere   schedule 18.01.2021It.IsAny<>
a() => _repository.Setup(m => m.Get(id)).Returns(foo)
tetapi mengharapkan IFoo sebagai nilai kembalian, tetapi mendapat repo. - person BenGeba   schedule 18.01.2021