Unit test with entity framework
Ngoài coding thì unit test cũng đóng vai trò rất quan trọng. Tuy nhiên vs nhiều người thì unit test sử dụng DBContext cũng gặp khó trong 1 số vấn đề như: logic liên quan write data thì liệu data đã đc import hay chưa, phai tạo 1 db dành cho test, dữ liệu bị thay đổi muốn comeback 1 state nào đó để test lại cần tốn nhiều efford và công đoạn. Sau đây sẽ là giải pháp.
Sử dụng in-memory trong entityframework core
var options = new DbContextOptionsBuilder<ResearchContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.EnableSensitiveDataLogging()
.Options;
var researchContext = new ResearchContext(options);
ta cần khởi tạo 1 instance DbCOntextOptionBuilder, trong đó có sử dụng InMemoryDatabase
Ví dụ thực tế
Ta có 1 case study cần test như sau:
Creating a record and then retrieving that record.
[Fact]
public async Task RetrieveDetails_DetailsCorrect()
{
// Arrange
var testUrl = “www.pmichaels.net";
var options = new DbContextOptionsBuilder<ResearchContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.EnableSensitiveDataLogging()
.Options;
var researchContext = new ResearchContext(options);
var researchController = new
ResearchController(researchContext);
var research = new Research()
{
Id = 1,
DateSaved = new DateTime(2018, 10, 24),
Note = “Useful site for programming and tech information”,
Read = false,
Url = testUrl
};
var createResult = await researchController.Create(research);
// Act
var detailsResult = await researchController.Details(1);
// Assert
var viewResult = (ViewResult)detailsResult;
var resultsModel = (Research)viewResult.Model;
Assert.Equal(testUrl, resultsModel.Url);
}