Guys, Thanks for the advice we will see which works best for us.
Neil On Feb 14, 12:29 am, Christian Wuerdig <[email protected]> wrote: > We have done it like this: > > Create a test fixture base which generates an in-place configuration to be > used. > We are using a SQLite in memory setup. This has the advantage of being fast > and no cleanup required but has the disadvantage of being different from our > production setup which uses a MS SqlServer > database (different database engine problems). It also requires to keep the > connection open during the whole test as the SQLite in memory database gets > killed once you close the connection so we > needed to provide a custom connection provider (the > SQLiteInMemoryTestingConnectionProvider) > > But you could adapt the config below to point to a any database server you > like. > > The code below was written against Castle 1.0 RC3 so some interfaces might > have slightly changed but it should still work. > > public class ActiveRecordInMemoryTestFixtureBase > { > protected static InPlaceConfigurationSource _Configuration = null; > > public static void OneTimeInitalize(params Assembly[] assemblies) > { > if (_Configuration != null) { return; } > > Hashtable properties = new Hashtable(); > properties.Add("hibernate.connection.driver_class", > "NHibernate.Driver.SQLite20Driver"); > properties.Add("hibernate.dialect", > "NHibernate.Dialect.SQLiteDialect"); > properties.Add("hibernate.connection.provider", > typeof(SQLiteInMemoryTestingConnectionProvider).FullName + > "," + > > typeof(SQLiteInMemoryTestingConnectionProvider).Assembly.FullName); > properties.Add("hibernate.connection.connection_string", "Data > Source=:memory:;Version=3;New=True;"); > > _Configuration = new InPlaceConfigurationSource(); > _Configuration.Add(typeof(ActiveRecordBase), properties); > ActiveRecordStarter.Initialize(assemblies, _Configuration); > } > > protected SessionScope _Session; > > protected void CreateSession() > { > ActiveRecordStarter.CreateSchema(); > _Session = new SessionScope(); > } > > protected void DisposeSession() > { > _Session.Dispose(); > if (SQLiteInMemoryTestingConnectionProvider.Connection != null) > { > SQLiteInMemoryTestingConnectionProvider.Connection.Close(); > } > SQLiteInMemoryTestingConnectionProvider.Connection = null; > } > } > > public class SQLiteInMemoryTestingConnectionProvider : > NHibernate.Connection.DriverConnectionProvider > { > public static IDbConnection Connection = null; > > public override IDbConnection GetConnection() > { > if (Connection == null) > { > Connection = base.GetConnection(); > } > > return Connection; > } > > public override void CloseConnection(IDbConnection conn) > { > // we never automatically close the connection once it is open > // it has to be closed manually > } > } > > Example usage with NUnit: > > [TestFixture] > public class SomeARTest : ActiveRecordInMemoryTestFixtureBase > { > [TestFixtureSetUp] > public void TestFixtureSetUp() > { > OneTimeInitalize(typeof (SomeModel).Assembly); > } > > [SetUp] > public void SetUp() > { > CreateSession(); > } > > [TearDown] > public void TearDown() > { > DisposeSession(); > } > } > > hope it helps > > Cheers > Christian > > > > > > > > Neil wrote: > > Hello, > > > We have an exist application which makes use of ActiveRecord to access > > the database (SQL Server 2005). Going forward we are planning on > > adding unit tests to parts of the system to help reduce manual testing > > time. > > > One of the areas of we are unsure on is how we should be testing > > classes that depend directly on the database without some major > > refactoring to introduce interfaces for all our ActiveRecord classes. > > Does any one have some suggestions on how we should do this? > > > Thanks > > > Neil -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.
