Ich habe ein ASP.NET Core-Projekt mit .NET Framework 4.6.1 und EF6. Nun möchte ich einige Komponententests schreiben und habe bereits Stunden damit verbracht, eine SQLite-In-Memory-Datenbank für die Verwendung von EF6 zu konfigurieren. Aber es funktioniert nicht.Schreibgerät-Test mit EF6 (Entity Framework 6)
Also, die Frage ist Wie kann ich mein Projekt mit EF6 ohne irgendwelche Mocks (eher eine In-Memory-Datenbank) testen?
Mein aktueller Code:
public class DataAccessLayer : DbContext
{
public DataAccessLayer(string connectionString)
: base(connectionString) {
}
public DataAccessLayer(DbConnection connection)
: base(connection, true) {
}
public DbSet<User> Users { get; set; }
public DbSet<Setting> Settings { get; set; }
public DbSet<UserRole> UserRoles { get; set; }
public DbSet<MainKey> MainKeys { get; set; }
}
[Table("Users")]
public class User
{
[Key]
[Required]
public int UserID { get; set; }
[Required][StringLength(50)]
public string UserName { get; set; }
...
}
public class Testbase
{
protected DataAccessLayer Context { get; private set; }
[TestInitialize]
public virtual void SetUp()
{
var connection = this.CreateConnection();
connection.Open();
this.Context = new DataAccessLayer(connection);
this.Context.Database.CreateIfNotExists();
}
private SQLiteConnection CreateConnection() {
var connectionStringBuilder = new SQLiteConnectionStringBuilder { DataSource = ":memory:" };
return new SQLiteConnection(connectionStringBuilder.ToString());
}
}
Wenn ich versuche, einen Benutzer hinzufügen, bekomme ich folgende Fehlermeldung:
System.Data.SQLite.SQLiteException: SQL logic error or missing database no such table: Users.
ich nehmen , dass meine Tabellen durch den Aufruf this.Context.Database.CreateIfNotExists();
erzeugt werden, oder Täusche ich mich darüber?
Ich weiß, dass es Ihre Frage nicht beantwortet, aber Sie sollten https://github.com/tamasflamich/effort denken – Jim
FWIW, in- Speicherdatenbank oder nein, dies ist kein Unit-Test; Es ist ein * Integrationstest *. In dieser Hinsicht sollten Sie wirklich die gleiche DB-Plattform verwenden, auf der Ihre tatsächliche Site läuft, d. H. So etwas wie SQL Server und nicht SQLite. –