Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误:在非虚拟成员上设置无效:x=>;_C#_Unit Testing_Linq To Entities - Fatal编程技术网

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;}
我把它变成虚拟的,错误消失了