2017-09-07 131 views
0

我有很多UnitTests,全部配置爲AnyCPU。我們希望他們在BUILD機器上運行x64。構建機上運行基本NUNIT控制檯跑步者詹金斯服務器:如何指定NUnit測試運行器以64位執行測試

C:\nunit-console\nunit3-console.exe path-to-my-solution.sln --config=Debug --agents=1 --process=Separate --result=TestResult.xml;format=nunit2 --timeout=300000 --workers=1 

出於測試目的,我有這個單元測試:

[Test] 
public void TestProcess() 
{ 
    Assert.AreEqual(Environment.Is64BitProcess, true); 
} 

在Visual Studio中,如果我去Test -> Test Settings -> Default Processor Architecture,它如果我選擇x86,則失敗,但如果選擇x64,則成功。

有沒有辦法執行直接throught的nunit3-console.exe測試時無在測試項目(這裏不討論它的目標改變平臺具有相同的行爲,我們只是承認我們有一些理由來保持它作爲「任何CPU」)。

我發現這個https://msdn.microsoft.com/en-us/library/ee782531.aspx它解釋說,要在Visual Studio上做到這一點,我們可以選擇我的方法,要麼選擇創建一個test.runsettings

我試圖創建一個test.runsettings文件,包含以下內容:

<?xml version="1.0" encoding="utf-8"?> 
<RunSettings> 
    <!-- Configurations that affect the Test Framework --> 
    <RunConfiguration> 
    <!-- [x86] | x64  
     - You can also change it from menu Test, Test Settings, Default Processor Architecture --> 
    <TargetPlatform>x64</TargetPlatform> 
    </RunConfiguration> 
</RunSettings> 

我已經把它放在我的解決方案的根,我已經做了Test -> Test Settings -> Select Test Settings file。 奇怪的部分是,我感覺這個操作(將該文件設置爲「測試設置文件」在我提交時並未保留,因爲如果我在另一臺計算機上進行了最新更改,那麼完成後,我必須再次設定

但我的單元測試仍然失敗build機器上的任何想法替代的還是什麼,我錯在這裏做

+0

如果您使用的是NUnit控制檯運行程序,則有關適配器,測試設置等的信息都不相關。所有這些只適用於在Visual Studio下運行測試。請修改以包含與您如何運行測試相關的信息。 – Charlie

+0

@Charlie NUnit控制檯不使用'runsettings'文件?我使用提供的命令行運行測試,並試圖在控制檯(使用NUnit控制檯)中模擬Visual Studio中的結果(以及適配器)。 – J4N

+0

'.runsettings'文件是一個VS功能,與nunit控制檯運行無關。 – Charlie

回答

0

從基本的問題開始:。。?「如何指定NUnit的[控制檯]測試運行器執行64位測試?「答案是什麼都沒有

純IL組件(AnyCpu目標)作爲64位p在具有64位操作系統的64位機器上執行操作。你不必做任何事情。控制檯運行程序提供了一個--x86選項以32位進程運行您的AnyCpu代碼,但不存在相應的64位選項,因爲它不是必需的。

有幾種方法你能打敗這個默認: 1.運行在32位機器上或下的OS 2.強制測試,在32位進程中運行的32位版本 3 。運行一個目標爲32位的測試。

我懷疑你正在做的兩個2和3

通過運行.sln文件,你問NUnit的加載在方案規定的每一個組件。因爲您使用了--process=Separate選項,所以您將強制所有這些程序集在相同的進程中加載​​。如果這些程序集(包括非測試程序集)需要32位,那麼即使一個也需要32位,那麼該獨立進程將是32位進程。

請注意,--process=Separate選項不會在其自己的進程中運行每個程序集,而是在與主進程分離的單個進程中運行。如果您在不閱讀文檔的情況下使用它,這是略微不直觀的。

我的建議是 1.不要在命令行上添加任何選項,除非您瞭解他們的操作,並確定您確實需要它們。 NUnit被設計爲當你使用默認值時自己弄清楚事情,但是使用你提供的任何選項,不管它看起來有多瘋狂! 2.閱讀文檔

作爲一個起點,這個命令應該爲你工作...

nunit3-console path-to-assembly.dll path-to-another-assembly.dll

至於其他選項... * --process:Separate是一個壞主意。讓它默認爲Multiple。 * --agents=1如果您希望每個進程在下一次啓動之前運行,則可以。 * --workers=1只有在某些測試使用[Parallelizable]並且您試圖將其禁用時纔有意義。

如果您使用的解決方案是因爲在命令行中放置的組件太多,則上述可能會有效,程序集是NUnit可以加載的程序集。使用默認流程設置有更好的機會。否則,我建議使用NUnit項目。

+0

我發現我有一個單元測試項目引用了「首選32位」標誌(但仍然內置在AnyCPU中)。如果我在Visual Studio上將「首選體系結構」設置爲64位,則我的單元測試可以與nunit測試適配器一起使用,但不能與nunit控制檯一起使用。所以在某些情況下,「強制」測試運行在64位是有意義的。 – J4N

+0

您澄清說您正在使用控制檯運行程序,所以我給了您一個更改列表。你有嘗試過嗎?如果問題出在適配器上,我會給出有關適配器的建議。 THey是兩個不同的程序,運行測試的方式不同。 – Charlie

+0

我不能,我已經有超過30個項目進行測試,並且正在增長,我無法手動指定它們中的每一個。單獨是強制性的,因爲我們有一些設計不佳的測試正在達到一些在註冊期間必須是獨立的「註冊」。我們希望確保每次只運行一次測試。無論如何,如果它使用適配器而不是控制檯時,我有一個「首選32位」標誌,我不明白爲什麼運行測試分開會改變任何東西。如果我刪除了首選32位標誌,它將起作用,因此它與您提到的所有參數無關。 – J4N