Tôi đang viết một trường hợp thử nghiệm đơn giản để kiểm tra bộ điều khiển của tôi gọi bộ nhớ cache trước khi gọi dịch vụ của tôi. Tôi đang sử dụng xUnit và Moq cho nhiệm vụ.Cách thích hợp để kiểm tra ASP.NET Core IMemoryCache
Tôi đang gặp sự cố vì GetOrCreateAsync<T>
là một phương pháp tiện ích mở rộng và không thể mô phỏng khuôn khổ đó bằng khung. Tôi dựa vào chi tiết nội bộ để tìm ra tôi có thể thử TryGetValue
thay vào đó và nhận được ngay với thử nghiệm của tôi (xem https://github.com/aspnet/Caching/blob/c432e5827e4505c05ac7ad8ef1e3bc6bf784520b/src/Microsoft.Extensions.Caching.Abstractions/MemoryCacheExtensions.cs#L116)
[Theory, AutoDataMoq]
public async Task GivenPopulatedCacheDoesntCallService(
Mock<IMemoryCache> cache,
SearchRequestViewModel input,
MyViewModel expected)
{
object expectedOut = expected;
cache
.Setup(s => s.TryGetValue(input.Serialized(), out expectedOut))
.Returns(true);
var sut = new MyController(cache.Object, Mock.Of<ISearchService>());
var actual = await sut.Search(input);
Assert.Same(expected, actual);
}
tôi không thể ngủ với thực tế là tôi đang nhìn trộm vào các chi tiết thực hiện MemoryCache và nó có thể thay đổi bất cứ lúc nào.
Để tham khảo, đây là mã SUT:
public async Task<MyViewModel> Search(SearchRequestViewModel request)
{
return await cache.GetOrCreateAsync(request.Serialized(), (e) => search.FindAsync(request));
}
có bạn khuyên bạn nên kiểm tra bất kỳ khác nhau?
Bạn không nên kiểm tra 'IMemoryCache' vì nó là một phần của thư viện. Các tác giả của thư viện nên làm bài kiểm tra. –