.net 所有测试都通过,但TFS将生成标记为部分成功

.net 所有测试都通过,但TFS将生成标记为部分成功,.net,tfs,mstest,.net,Tfs,Mstest,我们当前的项目涉及构建一个由.Net应用程序控制的机器人化盒子。我们与相当多的硬件库接口,并设置了一个集成服务器,所有硬件都连接到该服务器上,以运行夜间回归测试 不幸的是,并不是我们设置中的所有硬件库都能与TFS和MSTest很好地集成 当我们使用某个库运行构建和测试时,我们有以下两种行为之一: 所有测试都标记为已通过 TFS,但构建显示为 部分成功 TFS未显示任何测试运行,但日志显示所有测试均已通过,生成标记为部分成功 查看日志,我们可以在测试发布到TFS服务器后看到这两行代码, “处理

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

不幸的是,并不是我们设置中的所有硬件库都能与TFS和MSTest很好地集成

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

  • 所有测试都标记为已通过 TFS,但构建显示为 部分成功
  • TFS未显示任何测试运行,但日志显示所有测试均已通过,生成标记为部分成功
查看日志,我们可以在测试发布到TFS服务器后看到这两行代码, “处理MSTest异常” “MSTest.exe返回的退出代码为0,表明并非所有测试都通过”

真正让我困惑的是,从命令行用mstest运行相同的测试并没有显示这个问题。此外,当从命令行运行时,MsTest在所有测试通过时返回0,在出现错误时返回1

因此,我的问题是:

  • 成功/失败时适当的MSTest返回代码是什么
  • 除了在VisualStudio中登录之外,还有其他详细的日志功能吗
  • 有什么线索可以找吗
  • 附加信息:在mstest中使用(或不使用)“NoIsolation”标志时,我们确实注意到了一个差异。使用该标志时,特定测试将通过,但其他测试将失败。。。我们仍在调查此事

    谢谢


    编辑:日志的相关部分: 30/30测试通过

    编辑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)
            {
            }
        }
      }
    }
    

    成功/失败时适当的MSTest返回代码是什么

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

    例如:

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

    所有测试都通过了

    例如:

    正在等待发布。。。出版 试运行结果 公司大楼_SVC@BUILD-发展 2011-07-01 13:15:46任何CPU发布到 …
    …发布已成功完成

    除了登录visual studio之外,还有其他详细的登录功能吗?

    您可以访问以下站点获取更详细的日志:

    菜单栏->工具->选项…-> 项目和解决方案->MSBuild 项目生成输出详细信息

    有什么线索可以找吗?


    需要查看您的日志文件。

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

    您可以发布日志吗?日志的相关部分被添加到MsBuild中,也用于在VS2010上运行测试?它似乎使用了一个看起来不像MSBuild生成脚本的xml生成定义文件。创建了一个包装器以在MSBuild内调用MSTest.exe。MSTest.exe运行测试。您是否在测试中使用断言?如果您要注释掉30个测试中的29个,然后运行测试,您是否仍然看到此消息?如果是这样,你能发布执行单元测试的代码吗?我们在测试中使用断言。我没有尝试在buid服务器上注释测试,但我怀疑只运行一个测试可以工作:在我的机器上,当我在控制台上运行时,其中一个库在stderr上发出错误消息。这是否会导致MsBuild/TFS生成服务器将某些内容标记为失败?我遇到了此问题。由于某种原因,正在传递无效的命令行参数,MSBuild不喜欢这样做并将其记录下来,步骤被标记为部分成功。
    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)
            {
            }
        }
      }
    }