Reputation: 853
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
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