Ich versuche, meine UnitTesting mit AutoMoq und Xunit für das Einfügen zu automatisieren.Xunit - So verwenden Sie Moq und EF Core für Identity Primärschlüssel
Aber ich bekomme immer wieder, dass ich keinen Wert wie folgt in die KeyColumn einfügen kann. EnrolmentRecordID
ist die IdentityColumn in meiner SQL-Datenbank und ihr Wert wird automatisch beim Einfügen generiert.
Nachricht: Microsoft.EntityFrameworkCore.DbUpdateException: Ein Fehler ist aufgetreten, während die Einträge zu aktualisieren. Siehe die innere Ausnahme für Details. ---- System.Data.SqlClient.SqlException: Der explizite Wert für die Identitätsspalte kann nicht in die Tabelle 'EN_Schedules' eingefügt werden, wenn IDENTITY_INSERT auf OFF gesetzt ist.
Es kann vermieden werden, wenn ich Moq nicht oder ich nicht setzen die Daten an EnrolmentRecordID
Spalte. Aber ich weiß nicht, wie man EnrolmentRecordID
in AutoMoq ausschließt. Da es sich um die Schlüsselspalte handelt, kann ich die NULLABLE-Funktion auch nicht auf diese Spalte setzen.
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);
}
}
Könnten Sie mir bitte helfen h wie könnte ich Moq verwenden, um die MockObject
zu generieren und den Add
Service zu testen? Vielen Dank.
Ist dies ein Integrationstest? – Nkosi
Nein, Unit Test – TTCG
@Nkosi Soll ich nicht die echte Datenbank im UnitTest verwenden? – TTCG