2009-02-24 93 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() 
    { 
      ... 
    } 
} 
相關問題