[英]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.