I am new to Moq and unit testing in asp net. Let me dive straight into it.
My Test Function is the following:
namespace OfflineMessagingAPI.Tests { public class MessageTests { [Fact] public void ShouldGetAllMessagesSentByAUser() { // Arrange Data ---- MessageRequest Request = new MessageRequest(); Request.From = "userVIP"; var listOfMessages = new List<AspNetUserMessage>(); listOfMessages.Add(new AspNetUserMessage { From = Request.From, To = "User1", Text = "DummyTxt" }); listOfMessages.Add(new AspNetUserMessage { From = "User2", To = Request.From, Text = "txt2" }); var TranformedList = listOfMessages.AsQueryable(); // Setup database mocker Mock<BlockedUsersAndMessages> mockRepo = new Mock<BlockedUsersAndMessages>(); mockRepo.Setup(x => x.AspNetUserMessages.Where(o => o.From == Request.From || o.To == Request.From)).Returns(TranformedList); var controller = new MessageController(mockRepo.Object); // Act --- IEnumerable<AspNetUserMessage> messages = controller.GetAllMessages(Request); // Assert --- Assert.Equal(messages.AsQueryable(), TranformedList)); } } } My Where has lambda expression queries as:
Where(o => o.From == Request.From || o.To == Request.From) because that's how I call it in the GetAllMessages method.
When I run this test I get the following error: Message Error
Message: System.NotSupportedException : Unsupported expression: ... => ....Where<AspNetUserMessage>(o => o.From == MessageTests.<>c__DisplayClass0_0.Request.From || o.To == MessageTests.<>c__DisplayClass0_0.Request.From) Extension methods (here: Queryable.Where) may not be used in setup / verification expressions. Stack Trace: Guard.IsOverridable(MethodInfo method, Expression expression) InvocationShape.ctor(LambdaExpression expression, MethodInfo method, IReadOnlyList`1 arguments, Boolean exactGenericTypeArguments) ExpressionExtensions.<Split>g__Split|4_1(Expression e, Expression& r, InvocationShape& p) ExpressionExtensions.Split(LambdaExpression expression) Mock.Setup(Mock mock, LambdaExpression expression, Condition condition) Mock`1.Setup[TResult](Expression`1 expression) MessageTests.ShouldGetAllMessagesSentByAUser() line 41 I can not understand the problem here, any help would be so appreciated!