2017-05-26 64 views
0

我們使用NUnit進行自動化測試,並且我們有一些必須滿足的條件才能使測試運行。特別是,我們正在使用Xamarin.UITest進行移動UITesting,我們需要檢查我們目前是否正在測試我們想測試的平臺。不幸的是,我們沒有辦法使用類別來完成它。NUnit取消SetUp中的測試

我們現在要做的方式是獲得我們要測試的平臺列表。在[SetUp]方法中,我們檢查當前平臺是否包含在該列表中,如果沒有,我們中止測試。目前,我們通過讓Assert.Fail()失敗來中止測試。然而,我們寧願讓測試無聲地離開,沒有失敗和沒有成功的信息,就好像它從未運行一樣。這甚至是可能的,如果是這樣的話,該怎麼辦?

下面是當前的代碼:

private IList<Platform> _desiredPlatforms; 

public IList<Platform> DesiredPlatforms 
{ 
    get 
    { 
     if (_desiredPlatforms == null) 
     { 
      // read from environment variable 
     } 
     return _desiredPlatforms; 
    } 
} 

[SetUp] 
public void BeforeEachTest() 
{ 
    // Check if the current platform is desired 
    if (!DesiredPlatforms.Contains(_platform)) 
    { 
     Assert.Fail("Aborting the current test as the current platform " + _platform + " is not listed in the DesiredPlatforms-list"); 
    } 
    _app = AppInitializer.Instance.StartApp(_platform, _appFile); 
} 

回答

1

聽起來要麼Assert.Inconclusive()Assert.Ignore()更好地適應你在找什麼。

我怎麼想你會想要真的想要這樣做,但是,它與NUnit的PlatformAttribute相當 - 它將跳過無關平臺上的測試。 NUnit PlatformAttribute尚未爲框架的.NET Standard/PCL版本實現 - 但是,沒有理由不能創建自定義屬性,爲您的特定情況做類似的事情。您可以查看PlatformAttribute的NUnit代碼作爲示例,並編寫您自己的等效代碼PlatformHelper,以檢測您感興趣的平臺。

編輯:我已經鏈接到NUnit 3文檔,但只是閱讀Xamarin.UITest僅限於NUnit 2.x.我相信我所說的一切在NUnit 2中都是相同的 - 您可以在這裏找到NUnit 2文檔:http://nunit.org/index.php?p=docHome&r=2.6.4

+0

嘿,感謝您的想法:)我們不能使用類別來達到這個目的,因爲我們已經使用它們來對它們進行邏輯分組,但除此之外,我會毫不猶豫地嘗試你說的其他事情。 – vatbub

+0

對不起 - 它清楚地表明,在你的問題 - 我有一個金魚的記憶! – Chris

+1

沒問題:) Inconclusive似乎爲我們做了這項工作。 – vatbub