我正在嘗試使用AutoMoq和Xunit插入特性來自動化UnitTesting。Xunit - 如何使用Moq和EF Core作爲標識主鍵
但我一直得到,我不能插入一個值到KeyColumn作爲以下。 EnrolmentRecordID
是我的SQL數據庫中的IdentityColumn,它的值是在插入時自動生成的。
消息:Microsoft.EntityFrameworkCore.DbUpdateException:更新條目時發生錯誤 。請參閱 的內部例外詳情。 ---- System.Data.SqlClient.SqlException:當IDENTITY_INSERT爲 設置爲OFF時,無法在表'EN_Schedules'中插入標識列的顯式值。
這可以避免,如果我不使用Moq或我不設置數據到EnrolmentRecordID
列。但我不知道如何排除AutoMoq中的EnrolmentRecordID
。由於它是關鍵列,因此我無法將NULLABLE功能設置爲該列。
StudentSchedule.cs
public class StudentSchedule
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int EnrolmentRecordID { get; set; }
public string AcademicYearID { get; set; }
[Display(Name = "Student")]
public string StudentName { get; set; }
public string ProposedQual { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime? DateCreated { get; set; }
}
AddService
public async Task Add(StudentSchedule model)
{
await _context.Schedules.AddAsync(model);
await _context.SaveChangesAsync();
}
XUnitTest
public class TestCommandsSchedule
{
private ERAppData.Commands.CommandSchedule _command;
public TestCommandsSchedule()
{
_command = new ERAppData.Commands.CommandSchedule(AppsecDBContext.GenerateAppsecDBContext() as ERAppData.DbContexts.AppsecDbContext);
}
[Theory]
[AutoMoqData]
public async Task Should_Add_Schedule(StudentSchedule model)
{
model.AcademicYearID = "16/17";
model.DateCreated = null;
await _command.Add(model);
Assert.True(model.EnrolmentRecordID > 0);
}
}
你能幫我^ h我可以使用Moq生成MockObject
並測試Add
服務嗎?謝謝。
這是一個集成測試嗎? – Nkosi
不,單元測試 – TTCG
@Nkosi我不應該在UnitTest中使用真實的數據庫嗎? – TTCG