标签: mstest

单元测试的速度有多慢?

迈克尔·费瑟斯(Michael Feathers)在第13-14页的"有效使用遗产代码"中提到:

运行1/10秒的单元测试是一个缓慢的单元测试...如果[单元测试]运行速度不快,则它们不是单元测试.

我可以理解为什么如果一个人有30,000次测试,每秒1/10太慢,因为它需要将近一个小时才能运行.但是,这是否意味着1/11秒更好?不,不是真的(因为它只快5分钟).因此,一个严格的快速规则可能并不完美.

因此,当考虑单位测试的速度有多慢时,或许我应该重新解释这个问题.开发人员等待单元测试套件完成需要多长时间?

举一个测试速度的例子.看看几个MSTest单元测试持续时间:

0.2637638 seconds
0.0589954
0.0272193
0.0209824
0.0199389
0.0088322
0.0033815
0.0028137
0.0027601
0.0008775
0.0008171
0.0007351
0.0007147
0.0005898
0.0004937
0.0004624
0.00045
0.0004397
0.0004385
0.0004376
0.0003329
Run Code Online (Sandbox Code Playgroud)

所有21个单元测试的平均值为0.019785秒.请注意,最慢的测试是由于它使用Microsoft Moles来模拟/隔离文件系统.

因此,使用此示例,如果我的单元测试套件增长到10,000个测试,则运行可能需要3分钟.

performance unit-testing mstest

27
推荐指数
2
解决办法
1万
查看次数

微软单元测试.是否可以跳过测试方法体的测试?

所以我有需要从测试方法体跳过当前测试的情况.最简单的方法是在测试方法中写这样的东西.

if (something) return;
Run Code Online (Sandbox Code Playgroud)

但是我有很多复杂的测试,我需要一种方法来跳过我在当前测试方法体中调用的方法的测试.可能吗?

c# unit-testing mstest

27
推荐指数
3
解决办法
3万
查看次数

从Visual Studio 2012本机C++测试的命令行运行mstest

我有一个Visual Studio 2012解决方案,其中包含许多本机c ++测试项目.我可以使用"测试资源管理器"选项卡在Visual Studio 2012中正确且成功地运行所有这些.

但是,从命令行运行时,我无法运行测试.

根据文档,我一直在运行以下命令行

mstest /testcontainer:PathToTestProject\Win32\Release\testproject.dll
Run Code Online (Sandbox Code Playgroud)

我也需要跑

mstest /testcontainer:PathToTestProject\x64\Release\testproject.dll
Run Code Online (Sandbox Code Playgroud)

用于测试64位版本的代码.

当我运行这些命令行时,我收到以下错误消息.

Microsoft(R)测试执行命令行工具版本11.0.50727.1版权所有(c)Microsoft Corporation.版权所有.

加载PathToTestProject\Win32\Release\testproject.dll ... PathToTestProject\Win32\Release\testproject.dll无法加载测试容器PathToTestProject\Win32\Release\testproject.dll'或其依赖项之一.如果将测试项目程序集构建为64位程序集,则无法加载它.构建测试项目程序集时,请为平台选择"Any CPU".要在64位处理器上以64位模式运行测试,必须在"主机"选项卡中更改测试设置,以便在32位进程中运行测试.错误详细信息:无法加载文件或程序集'file:/// c:\ PathToTestProject\Win32\Release\testproject.dll'或其依赖项之一.该模块应该包含一个程序集清单.

代码是本机c ++,在Win32平台上有两个构建配置,在x64平台上有另一个构建配置.我不能拥有AnyCPU平台配置.我在这里缺少什么能够从命令行运行测试?

c++ mstest visual-studio-2012

27
推荐指数
1
解决办法
7596
查看次数

是否在MsTest不支持的测试基类中定义了TestMethod?

这个问题涉及一般的单元测试技术,可能具有非常有用的广泛适用场景.但通过一个例子更容易理解,更好地说明我的问题.

假设我想测试所有覆盖的类型都是Equals()如此正确.由于Equals()被定义为虚拟输入System.Object,因此各种类型可能会改变该行为.执行此操作的每种类型都必须进行测试,以确保新行为遵循该方法调用者的隐含期望.特别是Equals(),如果您重写该方法,新实现必须确保两个相等的对象也具有相同的哈希码,如下所定义System.Object.GetHashCode().

因此,为了强制执行此操作,将需要多个测试类,并且它们将在所有这些类型中测试相同的行为一致性.

为了避免重新键入测试这种类型所需的所有TestMethod,我改为定义一个如下所示的基本测试类,并让这些测试类都继承相同的行为测试套件:

/// <summary>
/// Test fixture base class for testing types that overrides Object.Equals()
/// </summary>
/// <typeparam name="T">The production type under test</typeparam>
public abstract class EqualsFixtureBase<T>
{
    #region Equals tests

    protected static void CompareInstances(T inst1, T inst2, bool expectedEquals)
    {
        Assert.AreEqual(expectedEquals, inst1.Equals((T)inst2));
        Assert.AreEqual(expectedEquals, inst1.Equals((object)inst2));
        if (expectedEquals)
        {
            // equal instances MUST have identical hash codes
            // this is a part of the .NET Equals contract
            Assert.AreEqual(inst1.GetHashCode(), …
Run Code Online (Sandbox Code Playgroud)

unit-testing mstest

26
推荐指数
3
解决办法
1万
查看次数

如何在MSTest中对JsonResult和集合进行单元测试

即使我已经编码了很长时间,我对单元测试也很陌生.我想把它作为我发展方式的一部分.我遇到了关于如何对集合进行单元测试的问题.我通常有我的jQuery脚本调用ASP.Net Server方法来获取数据和填充表格等.他们看着像是

Get_*Noun*() 
Run Code Online (Sandbox Code Playgroud)

通常返回一个JsonResult.关于使用MSTest进行单元测试的测试方法和方法的任何想法?

asp.net-mvc unit-testing mstest

26
推荐指数
2
解决办法
1万
查看次数

Resharper 7:MSTest不工作​​ - "测试未运行"

自从我升级到VS2012和Resharper 7后,我之前正在进行的MS测试不再运行了.

在此输入图像描述

测试在ASP.NET环境中运行.我使用以下属性:

    [TestMethod]
    [HostType("ASP.NET")]
    [AspNetDevelopmentServerHost("C:\\Projekte\\****\\Website", "/")]
    [UrlToTest("http://localhost:7924/")]
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

resharper mstest visual-studio visual-studio-2012 resharper-7.0

26
推荐指数
3
解决办法
2万
查看次数

即使测试失败,Teamcity也会运行构建步骤

我遇到了问题Teamcity,即使先前的步骤不成功,它也会继续运行构建步骤.

我的Build配置的最后一步是部署我的站点,如果我的任何测试失败,我不希望它这样做.

每个构建步骤都设置为仅在所有先前步骤都成功时执行.

在Build Failure Conditions选项卡中,我在Fail build下检查了以下选项:

-build process exit code is not zero
-at least one test failed
-an out-of-memory or crash is detected (Java only)
Run Code Online (Sandbox Code Playgroud)

这不起作用 - 即使测试失败,TeamCity部署我的网站,为什么?

我甚至尝试添加一个额外的构建失败条件,它将在构建日志中查找特定文本(即"Test Run Failed.")

在概述页面中查看已完成的测试时,您可以看到针对最新版本的错误消息:

"测试运行失败." 文本出现在构建日志中

但无论如何它仍然会部署它.

有谁知道如何解决这一问题?看来,问题已经运行了很长一段时间,在这里.

显然有一个解决方法:

到目前为止,我们不认为此功能非常重要,因为有一个明显的解决方法:脚本可以检查必要条件,并且不会生成TeamCity中配置的工件.

例如,脚本可以将工件从临时目录移动到TeamCity中指定的目录,作为完成之前的发布工件,以防构建操作成功.

但对于我究竟该如何做到这一点并不清楚,并且听起来也不是最好的解决方案.任何帮助赞赏.

编辑:我还能够解决快照依赖的问题,我将有一个独立的"部署"版本,它依赖于测试版本,现在如果测试失败,它就不会运行.

对于设置依赖性非常有用.

teamcity mstest build

26
推荐指数
2
解决办法
1万
查看次数

在Visual Studio 2012中调试代码时出错 - 无法初始化客户端代理:无法连接到

我有问题在visual studio中调试单元测试.我可以从测试资源管理器中运行它们.问题是我无法进入代码和调试.此外,我能够调试非单元测试的代码的其他部分.

当我从测试资源管理器测试右键单击,然后单击调试我得到一个加载对话框说"为根据f vstest.executionengine.x86.exe载符号:\ biniaries\VSET\mstestexecutor.x8g.csproj_1420192002\objr\X86".再过几次,测试停止运行,我在"测试"下的输出窗口中显示以下错误.

  ------ Run test started ------
  Failed to initialize client proxy: could not connect to .
  ========== Run test finished: 0 run (0:01:05.45) ==========
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

  • 为"此目录中的缓存符号"设置设置新目录.
  • 使用Update 3重新安装VS2012
  • 使用safemode开关运行
  • 赶上vs2012修复工具

.net mstest visual-studio-2012

26
推荐指数
3
解决办法
1万
查看次数

c#Resharper'没有在项目中找到测试'/'不确定:测试未运行'

我安装了ReSharper v8.2.1.我有一个包含几个测试项目的VS2013解决方案.他们中的大多数工作得很好.但是,有一个项目给我带来了麻烦.

在解决方案资源管理器中,我右键单击项目并选择"运行单元测试"并得到错误"在项目中找不到测试".如果我右键单击其中一个包含测试的.cs文件并选择"运行单元测试",我会收到错误"文件中未找到单元测试".如果我打开文件,我会看到预期的测试图标:Resharper测试图标

打开文件并运行测试后,它最终将它们添加到Unit Test Sessions窗口.但它们都是"不确定的:测试没有运行".我尝试在测试中和TestInitialize方法中设置断点,但都没有被击中.

值得一提的是,这些测试直到最近都运行良好.它似乎是在我取消了另一个项目的长期测试之后开始的.但是没有代码或项目或解决方案的更改.我删除了我的源代码并从SVN获得了新鲜内容.我甚至删除了我的AppData\Local\JetBrains文件夹,以确保没有缓存的东西.

Resharper如何确定应该运行哪些测试?任何人都有其他建议让这些测试再次运行?

更新:我卸载了ReSharper以消除它的等式.我仍然无法运行这个单元测试子集.

然后,在Visual Studio中,我打开TEST -> Test Settings -> Default Processor Architecture并将其更改x86x64.我的测试现在会运行!我仍然没有理解为什么这个项目不能在x86模式下运行,但我很高兴再次运行我的所有测试!

但是,我重新安装了ReSharper,这次是v9.0 Update 1,现在无论我如何设置架构,这个单元测试都不会再次运行.我回过头来了解清除缓存的所有答案和建议,但仍然没有运气.

c# mstest .net-4.5 visual-studio-2013 resharper-9.0

26
推荐指数
2
解决办法
1万
查看次数

在VS2010中使用MS Test ClassInitialize()和TestInitialize()而不是NUnit

我已经在VS2008上使用了NUnit,现在我正在适应VS2010上的MSTest.我曾经能够在TestSetup()中创建一个对象并在TestCleanup()中处理它,并且每次在NUnit中运行测试方法时都会创建对象,从而阻止我在每个测试方法中复制代码.

这对MSTest来说不可能吗?我发现使用ClassInitialize和ClassCleanup以及TestInitialize和TestCleanup属性的示例仅显示如何写入控制台.没有显示这些属性的更详细用法.

nunit mstest

25
推荐指数
1
解决办法
3万
查看次数