В наших тестах интеграции SQL Server мы завершаем тесты в TransactionScope, которые затем откатываем после каждого теста, чтобы поддерживать базу данных в согласованном состоянии.Postgres, Npgsql и тесты интеграции с использованием откатов
Использование Postgres (или, возможно, специально Npgsql) не представляется возможным, так как выбор за пределами отдельного соединения не может считывать незафиксированные данные (даже в том случае, если в незафиксированном транзакции).
Базовый сценарий упрощен ниже:
[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();
}
}
Может кто-нибудь поделиться, как люди приближаются к этим базам данных с Postgres?
Зачем вам нужны отдельные соединения для испытаний? –
Интеграционные тесты - это очень широкие функциональные тесты и отключены от того, как базовые классы используют соединения. –
В контексте я изучаю жизнеспособность перехода с сервера sql на postgres, и это была первая проблема, с которой я столкнулся с нашим набором тестов. –