sql server - Can I create an ambient transaction for testing? -
my current system has rather aggressive data layer creates sqldatabase instance me calling static method. pass in stored procedure name (string) , magic happens.
i want try , of crazy system under test , want control in database.
having realised structure
[test] public void should_do_some_thing() { using (var scope = new transactionscope()) { cleanupdatabase(); setupdatabasedata(); //run test assert.that(someresult,is.equalto("expectedvalue"); scope.dispose(); } } does want (no database changes persist outside test) nicer if set transaction within [setup] method , remove without committing in [teardown] section.
is possible?
note cannot call methods on command object or whatever...
you use testinitialize , testcleanup set up/clean up:
private transactionscope scope; [testinitialize] public void testinitialize() { scope = new transactionscope(); cleanupdatabase(); setupdatabasedata(); } [test] public void should_do_some_thing() { //run test assert.that(someresult,is.equalto("expectedvalue"); } [testcleanup] public void cleanup() { scope.dispose(); } you may need add error handling etc basics of it:
identifies method run before test allocate , configure resources needed tests in test class. class cannot inherited.
identifies method contains code must used after test has run , free resources obtained tests in test class. class cannot inherited.
if using nunit can use [setup] , [teardown] instead of [testinitialize] , [testcleanup] respectively.
Comments
Post a Comment