Hello, I am trying to write a simple unit test to get me started with TypeMock and am
having trouble figuring out how to mock an EF DBSet. I have looked at the "Mocking DBSet"
question and did not actually see a clear answer so I am posting my own question.
I am trying to test the "GetReportDefinitionComboBoxItemsByReportType" method below, and
in doing so I will need to mock the dbContext.ReportDefinitionEntities. I have pasted
what I have tried below the function that I am trying to test so you can see what I am
doing. When I run this test, I get a System.NullReferenceExcpetion, I am guessing on the
dbContext.ReportDefinitionEntities.
What am I doing wrong?
Public Function GetReportDefinitionComboBoxItemsByReportType(ByVal reportType As ReportTypes) As List(Of StandardComboBoxItem)
Using dbContext As New MyDataContext(_connectionString)
' ReSharper disable once AccessToDisposedClosure
Dim query = From reportDefinitionEntity In dbContext.ReportDefinitionEntities
Where reportDefinitionEntity.ReportType = reportType
Order By reportDefinitionEntity.Name
Select New StandardComboBoxItem With
{
.DisplayText = reportDefinitionEntity.Name,
.Value = reportDefinitionEntity.ReportDefinitionId
}
Return query.ToList()
End Using
End Function
<TestMethod()>
Public Sub GetReportDefinitionComboBoxItemsByReportType()
_fakeDbContext = Isolate.Fake.AllInstances(Of MyDataContext)()
_reportsDal = New ReportsDal()
Dim entities As DbSet(Of ReportDefinitionEntity) = _fakeDbContext.Set(Of ReportDefinitionEntity)()
entities.Add(New ReportDefinitionEntity() With {.Name = "Name C", .ReportDefinitionId = 3, .ReportType = ReportTypes.BusinessRegistrationForm})
entities.Add(New ReportDefinitionEntity() With {.Name = "Name A", .ReportDefinitionId = 2, .ReportType = ReportTypes.BusinessRegistrationForm})
entities.Add(New ReportDefinitionEntity() With {.Name = "Name B", .ReportDefinitionId = 1, .ReportType = ReportTypes.BusinessRegistrationForm})
Isolate.WhenCalled(Function() _fakeDbContext.ReportDefinitionEntities).WillReturnCollectionValuesOf(entities)
Dim results = _reportsDal.GetReportDefinitionComboBoxItemsByReportType(ReportTypes.BusinessRegistrationForm)
Assert.IsNotNull(results)
Assert.AreEqual(results.Count, 3)
End Sub
Thank you!