上个月了解了单元测试相关的东西,近期在做实际开发的时候有被要求脱离数据库去做单元测试
经过查找资料研究最终解决了问题
准备:依赖包 项目用的是 数据库是postgresql 直接装了最新的包其他的不知道可不可以
直接上测试源码
[Fact]
public async Task GetResult()
{
var sampleContext = await GetDataBaseContext();
DltCompilesService service = new DltCompilesService(sampleContext);
DltCompilesrequest resquest = new DltCompilesrequest() { secAllowanceCatCode = "f589b7c186a04960a00007e8d8f2801e" };
//act
var result = service.DetailSearchUTtest(resquest);//被测的方法
//assert
Assert.Equal("0000", result.stateCode);
}
//mock数据的方法
private async Task<WZSHRContext> GetDataBaseContext()
{
var option = new DbContextOptionsBuilder<WZSHRContext>().UseInMemoryDatabase(databaseName: "DLR").Options;//配置要模拟数据的数据库
var dataContext = new WZSHRContext(option);
dataContext.Database.EnsureCreated();
for (int i = 1; i < 10; i++)
{
if (i == 1)
{
try
{
//模拟数据
dataContext.dltSecondaryAllowanCategory.Add(new DltSecondaryAllowanCategory()
{
SecondaryAllowanceCode = "f589b7c186a04960a00007e8d8f2801e",
SecondaryAllowanceId = "00923d058ae948e997a3cbf3739fe000",
CardStatus = 0,
Maintainer = "WH2014208",
MaintainTime = DateTime.Now,
Status = 1,
CardNumber = 0,
IdlStatus = 0,
Deptids = "MZV900",
PlantCode = "P1",
AllowanceCatCode = "JT027",
SecondaryAllowanceName = "123456"
}); ;
}
catch (Exception ex)
{
throw;
}
}
else
{
dataContext.dltSecondaryAllowanCategory.Add(new DltSecondaryAllowanCategory()
{
SecondaryAllowanceCode = "f589b7c186a04960a00007e8d8f2801" + i,
SecondaryAllowanceId = i + "0923d058ae948e997a3cbf3739fe000",
CardStatus = 0,
Maintainer = "WH2014208",
MaintainTime = DateTime.Now,
Status = 1,
CardNumber = 0,
IdlStatus = 0,
Deptids = "MZV900",
PlantCode = "P1" + i,
AllowanceCatCode = "JT027" + i,
SecondaryAllowanceName = "123456" + i
});
}
await dataContext.SaveChangesAsync();
}
return dataContext;
}
如果这里报错
var option = new DbContextOptionsBuilder<WZSHRContext>().UseInMemoryDatabase(databaseName: "DLTDBName").Options;
需引用Microsoft.EntityFrameworkCore.InMemory 2.2.4就可以