C# 错误:在非虚拟成员上设置无效:x=>;
我有一个要测试的函数:C# 错误:在非虚拟成员上设置无效:x=>;,c#,unit-testing,linq-to-entities,C#,Unit Testing,Linq To Entities,我有一个要测试的函数: public class Database { public List<tableName> GetFromTable() { return (from x in _context.tableName where x.valid == 1 select x).ToList(); } private MyEntitieContex
public class Database
{
public List<tableName> GetFromTable()
{
return (from x in _context.tableName
where x.valid == 1
select x).ToList();
}
private MyEntitieContext _context;
public Database(MyEntitieContext context)
{
_context = context;
}
}
公共类数据库
{
公共列表GetFromTable()
{
返回(从x在_context.tableName中)
其中x.valid==1
选择x).ToList();
}
私有MyEntitieContext\u上下文;
公共数据库(MyEntitieContext上下文)
{
_上下文=上下文;
}
}
我正试图根据这一点编写一个单元测试。我的测试方法:
[TestMethod]
public void GetFromTableTest()
{
var data = new List<tableName>
{
new tableName() {valid = 1, NAME = "test 1"},
new tableName() {valid = 1, NAME = "test 2"}
}.AsQueryable();
var mockSet = new Mock<DbSet<tableName>>();
mockSet.As<IQueryable<tableName>>().Setup(m => m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<tableName>>().Setup(m => m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<tableName>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<tableName>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());
var mockContext = new Mock<MyEntitieContext>();
mockContext.Setup(x => x.tableNames).Returns(mockSet.Object); // error here
var database = new Database(mockContext.Object);
int numberOfRecords = database.GetFromTable().Count;
Assert.AreEqual(2, numberOfRecords, "Number of returned records are not equal.");
}
[TestMethod]
public void GetFromTableTest()
{
var数据=新列表
{
new tableName(){valid=1,NAME=“test 1”},
新建tableName(){valid=1,NAME=“test 2”}
}.AsQueryable();
var mockSet=new Mock();
mockSet.As().Setup(m=>m.Provider).返回(data.Provider);
mockSet.As().Setup(m=>m.Expression).Returns(data.Expression);
mockSet.As().Setup(m=>m.ElementType).Returns(data.ElementType);
mockSet.As().Setup(m=>m.GetEnumerator()).Returns(data.GetEnumerator());
var mockContext=new Mock();
mockContext.Setup(x=>x.tableNames).Returns(mockSet.Object);//此处出错
var database=新数据库(mockContext.Object);
int numberOfRecords=database.GetFromTable().Count;
AreEqual(2,numberOfRecords,“返回的记录数不相等”);
}
tableName它是在创建实体时从数据库生成的,我不能使它成为虚拟的。当我运行单元测试时,我得到一个错误
“非虚拟成员上的设置无效:x=>x.tableName”
如何修复它?好的,问题出在实体类中。在class.Context.cs中,我找到了行
public DbSet<tableName> tableNames { get; set; }
public DbSet tableNames{get;set;}
我把它变成虚拟的,错误消失了