Я новичок в Moq и модульное тестирование в asp net. Позвольте мне углубиться в это.
Моя тестовая функция выглядит следующим образом:
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 имеет запросы на лямбда-выражения как:
Where(o => o.From == Request.From || o.To == Request.From)
, потому что так я вызовите его в методе GetAllMessages.
Когда я запускаю этот тест, я получаю следующую ошибку: Сообщение об ошибке
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
Я не могу понять проблему здесь, любая помощь будет так признательна!