Nunit Moq: Unsupported expression: Value不可重写的成员不能用于setup / v



我为一个函数编写单元测试,为此我需要模拟一个实体。这就是我试图嘲笑的方式:

Mock<ISimpleData> data = new Mock<ISimpleData>();
data.Setup(i => i.RiskId.Value).Returns("123");//gets error here

RiskId的类型为StringData : DataGeneric<string>。从错误来看,由于RiskId的数据类型,Moq dll似乎无法获取RiskId.Value

是否有任何方法我仍然可以模拟RiskId.Value属性,因为这是在我正在编写测试的函数中使用的。下面是错误:

系统。NotSupportedException: Unsupported expression:…=比;价值……不可重写的成员(这里:DataGeneric.get_Value)不能在设置/验证表达式中使用。在Moq.Guard。IsOverridable(MethodInfo方法,Expression表达式)在C:projectsmoq4srcMoqGuard.cs:第99行在Moq.InvocationShape . .C:projectsmoq4srcMoqInvocationShape.cs:第84行。(LambdaExpression表达式,MethodInfo方法,IReadOnlyList'1参数,Boolean exactGenericTypeArguments, Boolean skipMatcherInitialization, Boolean allowNonOverridable在Moq.ExpressionExtensions。__split |5_0(表达式e,表达式&r, InvocationShape&p,布尔赋值,布尔allowNonOverridableLastProperty)在C:projectsmoq4srcMoqExpressionExtensions.cs:行324在Moq.ExpressionExtensions。分割(LambdaExpression表达式,布尔allowNonOverridableLastProperty)在C:projectsmoq4srcMoqExpressionExtensions.cs:第149行在Moq.Mock。设置(模拟模拟,LambdaExpression表达式,条件条件)在C:projectsmoq4srcMoqMock.cs: 505行在Moq.Mock 1。设置[结果](表达式'1表达式)在C:projectsmoq4srcMoqMock'1.cs:行454系统。异常{系统。NotSupportedException

由于

我不知道任何内置的DataGeneric类,所以我假设它是一个用户定义的类。

错误提示

值不可重写的成员(这里:DataGeneric.get_Value)…

这意味着您不应该模仿RiskId.Value

您应该尝试为RiskId本身设置一个模拟:

data.Setup(i => i.RiskId).Returns(new StringData("123"));

我假设你的StringData有一个构造函数可以接收它的值。

是的,您可以像这样实现自己的ISimpleData实现:

public class MyTests
{
[Test]
public void MyTest()
{
// Arrange
var data = new SimpleDataMock("123");
// Act
// ...
// Assert
// ...
}
private class SimpleDataMock : ISimpleData
{
public SimpleDataMock(string riskValue) => this.RiskId.Value = riskValue;
// ...
}
}

相关内容

  • 没有找到相关文章

最新更新