J'ai un projet ASP.NET Core utilisant .NET Framework 4.6.1 et EF6. Maintenant, je veux écrire des tests unitaires et j'ai déjà passé des heures à configurer une base de données SQLite en mémoire pour utiliser EF6. Mais ça ne marche pas.Ecriture d'un test unitaire utilisant EF6 (Entity Framework 6)
Donc, la question est comment puis-je tester mon projet en utilisant EF6 sans aucun faux (plutôt une base de données en mémoire)?
Mon code actuel:
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());
}
}
Si je tente d'ajouter un utilisateur, je reçois l'erreur suivante:
System.Data.SQLite.SQLiteException: SQL logic error or missing database no such table: Users.
Je suppose que mes tableaux sont générés en appelant this.Context.Database.CreateIfNotExists();
, ou est-ce que je me trompe à ce sujet?
Je sais que cela ne répond pas à votre question, mais vous devriez considérer https://github.com/tamasflamich/effort – Jim
FWIW, dans base de données de la mémoire ou non, ce n'est pas un test unitaire; C'est un * test d'intégration *. À cet égard, vous devriez vraiment utiliser la même plate-forme de base de données que votre site actuel, c'est-à-dire quelque chose comme SQL Server, pas SQLite. –