2011-07-05 59 views
2

我們當前的項目涉及構建由.Net應用程序控制的自動化盒子。我們連接了很多硬件庫,並且我們建立了一個集成服務器,並連接所有硬件以運行每晚的迴歸測試。所有測試都通過,但TFS將構建標記爲部分成功

不幸的是,並非我們設置中的所有硬件庫都與TFS和MSTest很好地集成在一起。

當我們具有一定librairy運行我們的構建和測試中,我們要麼這兩個行爲之一:

  • 在 TFS通過,但構建如圖 部分成功的所有測試都martked。
  • TFS顯示沒有測試運行,但日誌顯示所有測試通過,構建標記爲部分succeeede。在日誌

來看,我們可以看到這兩條線的測試後發佈到TFS服務器, 「處理MSTest的異常」 「MSTest.exe返回0的退出代碼表明,並非所有的測試通過「

真正令我困惑的是,使用mstest從命令行運行相同的測試不會顯示此問題。 Futhermore,在命令行中運行時,MSTEST 返回0時通過了所有測試和1時出現錯誤

所以我的問題是:

  1. 什麼是成功適當MSTest的返回碼/失敗
  2. 除了登錄visual studio之外,還有其他詳細的登錄功能嗎?
  3. 任何線索在哪裏看?

附加信息:在mstest中使用(或不)「NoIsolation」標誌時,我們確實注意到了差異。使用該標誌時特定的測試會通過,但其他測試將失敗......我們仍在調查那一個。

由於

編輯:日誌的相關部分: 30/30測試(多個)傳遞

Summary 
------- 
Test Run Completed. 
Passed 30 
---------- 
Total 30 
Results file: C:\Builds\1\Galil Daily build\TestResults\D201364-W7$_D201364-W7 2011-07-05 10_23_33_Any CPU_Debug.trx 
Test Settings: Default Test Settings 
Waiting to publish... 
Publishing results of test run [email protected] 2011-07-05 10:23:33_Any CPU_Debug to http://mtlapp07:8080/tfs/DI_DEV... 
..Publish completed successfully. 
Final Property Values 
Category = Galil 
CommandLineArguments = /noisolation 
Flavor = 
MaxPriority = -1 
MinPriority = -1 
PathToResultsFilesRoot = C:\Builds\1\Galil Daily build\TestResults 
Platform = 
Publish = True 
SearchPathRoot = C:\Builds\1\Galil Daily build\Binaries 
TestConfigId = -1 
TestConfigName = 
TestContainers = System.Linq.OrderedEnumerable`2[System.String,System.String] 
TestLists = 
TestMetadata = 
TestNames = 
TestSettings = 
ToolPath = 
Version = -1 
Final Property Values 
Condition = False 
Final Property Values 
Condition = True 

00:00 
Handle MSTest Exception 
MSTest.exe returned an exit code of 0 indicating that not all tests passed. 

00:00 
If testException is NOT TestFailureException 
Initial Property Values 
Condition = False 
Final Property Values 
Condition = False 

編輯2.0:

using System; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Galil; 

namespace TestProject1 
{ 
[TestClass] 
public class UnitTest1 
    { 
    [TestMethod] 
    public void TestMethod1() 
    { 
     Galil.Galil m_galil = new Galil.Galil(); 
     m_galil.address = "COM4 19200"; 
     string resp = m_galil.command("MTA=2.5;"); 
     Assert.AreEqual(":", resp); 
     try 
     { 
      m_galil.address = "OFFLINE"; 
     } 
     catch (Exception) 
     { 
     } 
    } 

    [TestMethod] 
    public void TestMethod2() 
    { 
     Galil.Galil m_galil = new Galil.Galil(); 
     m_galil.address = "COM4 19200"; 
     string resp = m_galil.command("MTA=2.0;"); 
     Assert.AreEqual(":", resp); 
     try 
     { 
      m_galil.address = "OFFLINE"; 
     } 
     catch (Exception) 
     { 
     } 
    } 
    } 
} 
+0

你可以發佈你的日誌嗎? –

回答

2

什麼是適當的MSTest成功/失敗返回碼

退出代碼1 =不通過了所有測試

實施例:

C:\程序 文件\的MSBuild \微軟\ VisualStudio的\ TeamBuild \ Microsoft.TeamFoundation.Build.targets(1377,5,1377 ,5): 警告:MSTest。EXE返回 退出代碼1表示並非所有 測試通過。

通過了所有測試

例子:

等待發布...發佈 結果試運行的 Company_TFSBuild_SVC @ BUILD-DEV 2011-07-01 13:15:46_Any CPU_Release到 http://company-source:8080/ ...
..發佈成功完成。

除了登錄visual studio之外,還有其他詳細的登錄功能嗎?

您可以通過獲得更詳細的日誌:

菜單欄 - >工具 - >選項 - > 項目和解決方案 - > MSBuild的 項目生成輸出的詳細程度

任何線索在哪裏看?

需要查看您的日誌文件。

+0

已添加日誌的相關部分 –

+0

MsBuild是否也用於在VS2010上運行測試?它似乎使用了一個不像MSBuild構建腳本的xml構建定義文件。 –

+0

創建一個包裝來調用MSBuild中的MSTest.exe。 MSTest.exe運行測試。 –

2

實際上,我們能夠將問題隔離到將字符串輸出到標準錯誤流中的庫。不知何故,如果TFS看到標準錯誤,它會將測試標記爲部分完成。

+0

我有這個問題。由於某種原因傳遞了無效的命令行參數,MSBuild不喜歡這種情況並記錄下來,步驟被標記爲部分成功。 – Edgar

+0

我的意思是MSTest ... – Edgar

相關問題