Sasha
Sasha

Reputation: 853

error Invalid setup on a non-virtual member:x=>

I have a function that I want to test:

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;
    }

}

I am trying to write an unit test according to this article. My test method:

[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.");
}

tableName it is generated from database while creating entities and I can't make it virtual. When I run an unit test, I get error

"Invalid Setup on a non-virtual member: x=>x.tableName"

How can I fix it?

Upvotes: 1

Views: 984

Answers (1)

Sasha
Sasha

Reputation: 853

Ok, the problem was in entities class. In class .Context.cs I found line

public DbSet<tableName> tableNames { get; set; }

I made it virtual and error disappeared.

Upvotes: 1

Related Questions