【问题标题】:All tests pass but TFS marks the build as partially succeded所有测试均通过,但 TFS 将构建标记为部分成功
【发布时间】:2011-09-28 20:04:38
【问题描述】:

我们当前的项目涉及构建一个由 .Net 应用程序控制的机器人化盒子。我们与很多硬件库进行交互,并且我们确实设置了一个集成服务器,所有硬件都连接到它以运行夜间回归测试。

遗憾的是,并非我们设置中的所有硬件库都能与 TFS 和 MSTest 完美集成。

当我们使用某个库运行构建和测试时,我们会出现以下两种行为之一:

  • 所有测试都标记为通过 TFS,但构建显示为 部分成功。
  • TFS 显示没有测试运行,但日志显示所有测试都通过了,构建被标记为部分成功。

查看日志,我们可以在测试发布到 TFS 服务器后看到这两行, “处理 MSTest 异常” "MSTest.exe 返回 退出代码 0,表示并非所有测试都通过了"

真正让我感到困惑的是,从命令行使用 mstest 运行相同的测试不会显示此问题。此外,从命令行运行时,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 D201364-W7$@D201364-W7 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)
        {
        }
    }
  }
}

【问题讨论】:

  • 你能发布你的日志吗?

标签: .net tfs mstest


【解决方案1】:

关于成功/失败的适当 MSTest 返回码是什么

退出代码 1 = 并非所有测试都通过

例子:

C:\程序 文件\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets(1377,5,1377,5): 警告:MSTest.exe 返回了一个退出 代码 1 表示并非全部 测试通过。

所有测试通过

例子:

正在等待发布...正在发布 试运行结果 公司_TFSBuild_SVC@BUILD-DEV 2011-07-01 13:15:46_Any CPU_Release 到 http://company-source:8080/...
..发布成功完成。

Visual Studio中除了登录,还有其他详细的登录功能吗?

您可以通过以下方式获取更详细的日志:

菜单栏 -> 工具 -> 选项... -> 项目和解决方案 -> MSBuild 项目构建输出详细程度

有什么线索可以看吗?

需要查看您的日志文件。

【讨论】:

  • 日志相关部分已添加
  • MsBuild 是否也用于在 VS2010 上运行测试?它似乎使用了一个看起来不像 MSBuild 构建脚本的 xml 构建定义文件。
  • 创建了一个包装器来调用 MSBuild 中的 MSTest.exe。 MSTest.exe 运行测试。
  • 您是否在测试中使用断言?如果您要注释掉 30 个测试中的 29 个并运行测试,您还会看到此消息吗?如果是这样,您可以发布执行该单元测试的代码吗?
  • 我们确实在测试中使用了断言。我没有尝试在 buid 服务器上注释掉测试,但我怀疑只运行一个测试可以工作:在我的机器上,当我在控制台上运行时,其中一个库在 stderr 上吐出错误消息。这会导致 MsBuild / TFS 构建服务器将某些内容标记为失败吗?
【解决方案2】:

实际上,我们能够将问题隔离到一个库,该库将字符串输出到标准错误流中。不知何故,如果 TFS 在标准错误中看到某些内容,它会将测试标记为部分完成。

【讨论】:

  • 我遇到了这个问题。由于某种原因传递了无效的命令行参数,MSBuild 不喜欢它并记录它,步骤被标记为部分成功。
猜你喜欢
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多