How to test if expression contains specific value with NSubstitute

1 day ago 4
ARTICLE AD BOX

In my code, I use a SingleOrDefaultAsync method, which accepts Expression<Func<T, bool> like this:

await _recipientRepository.SingleOrDefaultAsync(x => x.Id == receiverId);

The unit test looks like this:

[Fact] public async Task Should_Create_Delivery_With_Valid_Sender_And_Recipient() { // Arrange var sender = new Sender(_senderId, "John", "Doe"); var recipient = new Recipient(_recipientId, "Jane", "Smith"); _fakeSenderRepo .SingleOrDefaultAsync(Arg.Any<Expression<Func<Sender, bool>>>()) .Returns(sender); _fakeRecipientRepo .SingleOrDefaultAsync(Arg.Any<Expression<Func<Recipient, bool>>>()) .Returns(recipient); // Act var delivery = await _deliveryManager.CreateDeliveryAsync(_senderId, _recipientId); // Assert delivery.ShouldNotBeNull(); delivery.SenderId.ShouldBe(_senderId); delivery.ReceiverId.ShouldBe(_recipientId); }

I don't know how to check that there is _senderId in the Expression that I pass to SingleOrDefaultAsync. I don't like this Arg.Any<Expression<Func<Sender,bool>>>(), I want to control that I pass _senderId to the expression.

Read Entire Article