ska*_*kaz 7 asp.net nunit unit-testing asp.net-mvc-3
我对NUnit很新(以及一般的自动化测试).我最近做了一些Ruby On Rails工作,并注意到在我的测试套件中,当我创建对象(例如新用户)并在套件的过程中提交它们时,它们永远不会被提交到数据库以便我可以运行反复测试,不要担心该用户已经存在.
我现在正试图在NUnit中完成同样的事情,但我不太确定如何去做.我是否在Setup和Teardown块中创建了一个事务?谢谢.
为什么在单元测试期间会与数据库通信?这使得您的单元测试默认为集成测试.相反,为所有数据库通信创建包装器,并在单元测试期间对其进行存根/模拟.然后您不必担心之前和之后的数据库状态.
现在,如果您不愿意进行这种级别的重构:事务的问题是您需要一个开放的连接.因此,如果针对测试的方法自己处理所有通信,则很难注入可以在安装时创建的事务并在拆卸时回滚.
也许你可以用它.这很难看,但也许它对你有用:
namespace SqlServerHandling
{
[TestFixture]
public sealed class TestTransactionRollBacks
{
private string _connectionString = "Data Source = XXXDB; ; Initial Catalog = XXX; User Id = BLABLA; Password = BLABLA";
private SqlConnection _connection;
private SqlTransaction _transaction;
[SetUp]
public void SetUp()
{
_connection = new SqlConnection(_connectionString);
_transaction = _connection.BeginTransaction();
}
[TearDown]
public void TearDown()
{
_transaction.Rollback();
}
[Test]
public void Test()
{
Foo foo = new Foo(_connection);
object foo.Bar();
}
}
internal class Foo
{
private readonly SqlConnection _connection;
object someObject = new object();
public Foo(SqlConnection connection)
{
_connection = connection;
}
public object Bar()
{
//Do your Stuff
return someObject;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2483 次 |
| 最近记录: |