2009-02-24 65 views
3

我正在寻找一个项目/工具,它将在测试之前将数据插入到数据库中,并在测试运行后将其回滚。Rails Fixtures是否有.net等价物?

我知道在轨道上是Ruby有YAML赛程,所以我希望有一个项目在那里为.NET项目。

+0

灯具是添加Rails的功能。与“测试夹具”这个术语不同,它表示一组共享常用设置或拆卸代码的xUnit测试。 – Gishu 2009-02-24 15:04:19

+0

这是正确的。我发现怎么单词“固定”在.NET – 2009-02-24 15:32:22

回答

0

我使用的SQL Server Compact Edition和再生每次数据库的新副本(简单地复制初始数据库是罚款),如果在只读模式下使用的多个测试就可以共享同一个数据库文件。

有几个陷阱,并且不支持可编程性,但它很适合我需要它的基础知识。这也是惊人的快速。

2

有几个很好的方法把数据提供给在.NET测试。一种是使用NUnit内置的功能,例如参数化测试和理论。

参数化测试:

TestCaseAttribute让您轻松在下面的例子中从nunit.org提供硬编码的数据,以测试为:

[TestCase(12,3, Result=4)] 
[TestCase(12,2, Result=6)] 
[TestCase(12,4, Result=3)] 
public int DivideTest(int n, int d) 
{ 
    return(n/d); 
} 

TestCaseDataAttribute让你得到更多的花哨提供数据(例如从数据库返回数据)。

事务回滚

经常使用的另一个技巧是靠交易。基本上,在测试之前开始一个交易,然后回滚。这甚至可以使用基类来自动化,所以你的测试根本不处理事务。例如,你可能有一个基类的测试夹具类似如下:

public class TestBase 
{ 
    private TransactionScope _transacation; 

    [SetUp] 
    public virtual void InitializeTest() 
    { 
     //NOTE: Base class TestInitialize methods are called before test Initialize methods in derived class. 

     // Setup a DB transcation to roll everything back after the tests. 
     if (_transacation != null) 
      throw new Exception("old transacation still exists"); 
     // Give a long timeout on this transacation for debugging... 
     _transacation = new TransactionScope(TransactionScopeOption.RequiresNew, TimeSpan.FromSeconds(60)); 
    } 

    [TearDown] 
    public virtual void CleanupTest() 
    { 

     // Roll all the changes made during the test back. 
     _transacation.Dispose(); 
     _transacation = null; 
    } 
} 

由于在基类中的TestInitialize装饰方法被称为派生类 TestInitialize方法,你甚至可以添加一些数据到你父类的TestInitialize方法中的数据库。

父类可能看起来像:

[TestFixture] 
public class MyClassTests : TestBase 
{ 
    [TestFixtureSetUp] 
    public void InitializeUnit() 
    { 
      //Setup mocks... 
    } 

    [SetUp] 
    public override void InitializeTest() 
    { 
      base.InitializeTest(); 
      // Add test data to database 
    } 

    [Test] 
    public void RealTest() 
    { 
      ... 
    } 
} 
相关问题