【发布时间】:2020-07-25 07:34:32
【问题描述】:
我是 ASP 网络中最小起订量和单元测试的新手。让我直接进入它。
我的测试功能如下:
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));
}
}
}
我的 Where 有 lambda 表达式查询:
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
我无法理解这里的问题,任何帮助将不胜感激!
【问题讨论】:
-
令人惊讶的是,当我将该错误消息插入搜索引擎时,出现的结果就是我链接到的问题。下一次,尝试做同样的事情。
-
你的链接一点帮助都没有,你太粗鲁了!!我正在尝试模拟实体框架,您的链接与我的问题无关!
标签: asp.net-mvc unit-testing moq