【发布时间】:2020-02-01 13:42:04
【问题描述】:
Moq.SetupGet 抛出异常。
为什么?
如果我没有办法如何正确执行,如何更改测试的类(我无法添加接口或使属性虚拟或类似的东西)
类
public class ToDelete
{
public int ToDeleteProperty
{
get;
set;
}
}
测试
[TestMethod]
public void PutCaseByIdCaseContactsExperimental()
{
var toDelete = new Mock<ToDelete>();
toDelete.SetupGet(x => x.ToDeleteProperty).Returns(5); //<------throws exception below
Assert.AreEqual(toDelete.Object.ToDeleteProperty, 5);
}
结果堆栈跟踪:v Moq.Guard.IsOverridable(MethodInfo 方法, 表达式表达式) v Moq.InvocationShape..ctor(LambdaExpression 表达式、MethodInfo 方法、IReadOnlyList'1 个参数)v Moq.ExpressionExtensions.g__Split|4_1(表达式 e, 表达式& r, InvocationShape& p) v Moq.ExpressionExtensions.Split(LambdaExpression 表达式) v Moq.Mock.Setup(Mock mock, LambdaExpression 表达式, Condition 条件) v Moq.Mock.SetupGet(Mock mock, LambdaExpression 表达式,条件条件)v Moq.Mock
1.SetupGet[TProperty](Expression1 表达式)v Cnx.Csm.CaseManagement.Test.Controllers.CaseControllerTest.PutCaseByIdCaseContactsExperimental() v C:\tfs____Test.cs:line 682 结果消息:测试方法 ____________________Test.________________抛出异常:System.NotSupportedException:不支持的表达式:x => x.ToDeleteProperty 不可覆盖的成员(这里: CaseControllerTest.ToDelete.get_ToDeleteProperty) 不能用于 设置/验证表达式。
【问题讨论】:
-
你不必模拟
ToDeleteProperty。尝试构造一个具体对象并将值设置为5,就像在非测试代码中所做的那样。 -
为什么要在这里使用mock?只是为了测试目的而构建对象的实例?或者通过 SetupAllProperties 使用存根...
标签: c# unit-testing moq