In unseren SQL Server-Integrationstests werden Tests in einem TransactionScope umbrochen, das nach jedem Test zurückgesetzt wird, um die Datenbank in einem konsistenten Zustand zu halten.Postgres-, Npgsql- und Integrationstests mit Rollbacks
Mit Postgres (oder möglicherweise speziell Npgsql) scheint dies nicht möglich zu sein, da außerhalb einer einzelnen Verbindung ausgewählte Daten nicht festgeschriebene Daten lesen können (auch wenn innerhalb des nicht festgeschriebenen Transaktionsbereichs).
[Test]
public void ImplicitEnlist()
{
var connectionString = ConnectionString + ";enlist=true";
using (var scope = new TransactionScope())
{
using (var conn = new NpgsqlConnection(connectionString))
{
conn.Open();
Assert.That(conn.ExecuteNonQuery(@"INSERT INTO data (name) VALUES('test')"), Is.EqualTo(1));
}
using (var conn = new NpgsqlConnection(connectionString))
{
// -> this is false
Assert.That(conn.ExecuteScalar(@"SELECT COUNT(*) FROM data"), Is.EqualTo(1));
}
scope.Rollback();
}
}
Kann jemand teilen, wie Leute diese Datenbanken mit Postgres nähern:
Das Basisszenario wird im Folgenden vereinfacht?
Warum benötigen Sie separate Verbindungen für die Tests? –
Bei den Integrationstests handelt es sich um sehr umfangreiche Funktionstests, bei denen keine Verbindung zwischen den zugrunde liegenden Klassen hergestellt wird. –
Für Kontext, untersuche ich die Durchführbarkeit einer Migration von SQL Server zu Postgres und das war das erste Problem, das ich mit unserer Testsuite traf. –