Bekerja pada C # Server dengan SQL Server dan PetaPoco , ini adalah pendekatan yang kami ambil untuk membersihkan data dalam Tes Unit.
Unit test yang khas akan memiliki Setup dan Teardown sebagai berikut:
[TestFixture]
internal class PlatformDataObjectTests
{
private IDatabaseConfiguration _dbConfig;
private Database _pocoDatabase;
private PlatformDataObject _platformDto;
[SetUp]
public void Setup()
{
_dbConfig = new CommonTestsAppConfig().GetDatabaseConfiguration();
_pocoDatabase = new Database(_dbConfig.ConnectionString, SqlClientFactory.Instance);
_platformDto = new PlatformDataObject(_pocoDatabase);
_platformDto.BeginTransaction();
}
[TearDown]
public void TearDown()
{
Console.WriteLine("Last Sql: {0}", _pocoDatabase.LastCommand);
_platformDto.RollbackTransaction();
_platformDto.Dispose();
}
// ...
}
Di mana PlatformDataObject adalah kelas yang bertanggung jawab untuk berkomunikasi dengan database misalnya melakukan Pilih Sisipkan Perbarui Hapus. Semua tipe * DataObject mewarisi ServerDataObject - kelas dasar memiliki metode untuk membatalkan, memutar kembali atau melakukan transaksi.
/// <summary>
/// A Data-Transfer Object which allows creation and querying of Platform types from the database
/// </summary>
[ExportType(typeof(IPlatformDataObject))]
public class PlatformDataObject : ServerDataObject, IPlatformDataObject
{
private static readonly ILog Log = LogManager.GetLogger(typeof (ProductDataObject));
private const string PlatformTable = "t_Platform";
public PlatformDataObject(IPocoDatabase pocoDatabase) : base(pocoDatabase)
{
}
...
}
/// <summary>
/// A base Data-Transfer Object type
/// </summary>
public abstract class ServerDataObject : IServerDataObject
{
protected const string Star = "*";
private readonly IPocoDatabase _pocoDatabase;
public ServerDataObject(IPocoDatabase pocoDatabase)
{
_pocoDatabase = pocoDatabase;
}
public string LastCommand
{
get { return PocoDatabase.LastCommand; }
}
public IPocoDatabase PocoDatabase
{
get { return _pocoDatabase; }
}
public int TransactionDepth
{
get { return _pocoDatabase.TransactionDepth; }
}
public bool TransactionAborted { get; private set; }
public void BeginTransaction()
{
_pocoDatabase.BeginTransaction();
}
public void AbortTransaction()
{
_pocoDatabase.AbortTransaction();
}
public void RollbackTransaction()
{
TransactionAborted = true;
}
public virtual void Dispose()
{
if (TransactionAborted)
_pocoDatabase.AbortTransaction();
else
_pocoDatabase.CompleteTransaction();
}
}
Semua tes unit akan memanggil RollbackTransaction (), pada akhirnya akan memanggil IDbTransaction.Rollback ().
Dalam pengujian kami menemukan rutin untuk membuat instance baru dari * * DataObject, membuat beberapa baris menggunakan pernyataan Sisipkan, melakukan tes pada mereka (Memilih, Pembaruan dll ...) dan kemudian memutar kembali.
Kami dapat mengatur satu set data uji sebelum semua tes dijalankan menggunakan SetUpFixture - kelas yang dijalankan sekali sebelum semua tes dijalankan, dan menghapus / mengembalikan data dalam teardown setelah semua tes dijalankan.