我当前的系统有一个相当激进的数据层,通过调用静态方法为我创建一个SqlDatabase实例。我传入一个存储过程名称(字符串),只是发生了魔法。
我想尝试让一些这个疯狂的系统受到测试,因此想要控制数据库中的内容。
意识到这个结构
[Test]
public void Should_do_some_thing()
{
using (var scope = new TransactionScope())
{
CleanUpDatabase();
SetupDatabaseData();
//Run Test
Assert.That(someResult,Is.EqualTo("ExpectedValue");
scope.Dispose();
}
}
做我想做的事情(测试之外没有数据库更改持续存在)如果我可以在[SetUp]
方法中设置事务并且在[TearDown]
部分没有提交的情况下删除,那么显然会更好。< / p>
这可能吗?
注意我无法调用command
对象上的任何方法或其他...
答案 0 :(得分:1)
您可以使用TestInitialize
和TestCleanup
进行设置/清理:
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();
}
您可能需要添加错误处理等,但这是它的基础:
标识在测试之前运行的方法,以分配和配置测试类中所有测试所需的资源。这个类不能被继承。
标识一种方法,该方法包含在运行测试后必须使用的代码,并释放测试类中所有测试获得的资源。这个类不能被继承。
如果您使用的是NUNIT,那么您可以分别使用[SetUp]
和[TearDown]
代替[TestInitialize]
和[TestCleanUp]
。