簡體   English   中英

如何區分測試類中的單元測試和集成測試?

[英]How do I distinguish between Unit Tests and Integration Tests inside a test class?

我的問題與此類似: Junit:拆分集成測試和單元測試 但是,我的問題是關於NUnit而不是:JUnit。 在測試類中區分單元測試和集成測試的最佳方法是什么? 我希望能夠做到這樣的事情:

[TestFixture]
    public class MyFixture
    {
        [IntegrationTest]
        [Test]
        public void MyTest1()
        {
        }

        [UnitTest]
        [Test]
        public void MyTest1()
        {
        }
    }

有沒有辦法用NUnit做到這一點? 有沒有更好的方法來點這個?

就個人而言,我發現將它們保存在單獨的程序集中會更好。 您可以使用一個約定,如名稱 .Integration.Tests和名稱 .Tests(或任何你喜歡的團隊)。

程序集或屬性適用於TeamCity等CI服務器。 屬性方法的痛苦傾向於出現在IDE測試運行器中。 我希望能夠快速運行我的單元測試。 使用單獨的程序集,很容易 - 選擇適當的測試項目並運行測試。

這個答案與其他幾個答案分享了一些細節,但我想以稍微不同的方式提出這個問題。

TestFixtures的設計使每個測試都得到相同的設置。 要正確使用TestFixtures,您應該以這樣的方式划分測試,即所有具有相同設置的測試最終都在同一個測試類中。 這就是幾乎每個xunit框架都被設計使用的方式,當您使用軟件時,您總能獲得更好的結果。

由於Integration和Unit測試不太可能共享相同的設置,因此這自然會導致將它們放在一個單獨的類中。 通過這樣做,您可以將所有集成測試分組到命名空間下,使其易於獨立運行。

更好的是,正如另一個答案所示,將它們放在一個單獨的組件中。 這對於大多數CI構建來說效果更好,因為集成測試的失敗可能更容易與集成測試的失敗區分開來。 此外,使用單獨的程序集消除了使用類別或特殊屬性的所有復雜性。

類別屬性可以幫助您執行此操作。

https://github.com/nunit/docs/wiki/Category-Attribute

namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [TestFixture]
  public class SuccessTests
  {
    [Test]
    [Category("Unit")]
    public void VeryLongTest()
    { /* ... */ }
}

不要將它們放在同一個類中,要么將它們拆分到測試程序集中的文件夾中,要么將它們拆分為兩個單獨的測試程序集。

從長遠來看,這將更容易管理,尤其是如果你使用像NCrunch這樣的工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM