测试方法尚无定论:测试未运行。错误?

时间:2013-08-19 10:03:07

标签: c# asp.net-mvc asp.net-mvc-4 unit-testing resharper

我有一个测试类,下面我发布了测试类的样本测试

namespace AdminPortal.Tests.Controller_Test.Customer
{
    [TestClass]
    public class BusinessUnitControllerTests
    {
        private IBusinessUnitRepository _mockBusinessUnitRepository;
        private BusinessUnitController _controller;

        [TestInitialize]
        public void TestInitialize()
        {
            _mockBusinessUnitRepository = MockRepository.GenerateMock<IBusinessUnitRepository>();
            _controller = new BusinessUnitController(_mockBusinessUnitRepository);
        }

        [TestCleanup]
        public void TestCleanup()
        {
            _mockBusinessUnitRepository = null;

            _controller.Dispose();
            _controller = null;

        }

        #region Index Action Tests
        [TestMethod]
        public void Index_Action_Calls_GetAllBusinessUnit()
        {
            _mockBusinessUnitRepository.Stub(x => x.GetAllBusinessUnit());

            _controller.Index();

            _mockBusinessUnitRepository.AssertWasCalled(x=>x.GetAllBusinessUnit());
        }
    }
}

当我运行项目时,我得到了以下屏幕 enter image description here

我检查了引用,测试项目引用了主项目。 知道为什么测试没有运行或说它们没有结果?

修改1:

我看了一篇帖子here并将我的测试设置的默认处理器架构更改为X64,但它仍然不起作用。

52 个答案:

答案 0 :(得分:129)

以防上述选项都不适用于任何人我通过在App.Config中注意到由于测试项目中缺少nuget包而导致损坏的条目来修复此错误的实例。

答案 1 :(得分:42)

对我而言,这是相当令人沮丧的,但我至少找到了解决案例的方法:

如果您的TestMethod是异步的,则它不能为空。它必须返回任务。

希望它可以帮助某人:)

答案 2 :(得分:37)

我有与resharper相同的问题,我通过更改选项更正了此错误:

Resharper =&gt;选项=&gt;工具=&gt;单元测试

我只需取消选中“正在测试的影子复制程序集”选项

答案 3 :(得分:22)

这是一个Resharper问题。在Resharper选项 - &gt;工具 - &gt; MSTEST中,我取消选中使用旧版亚军,现在它可以正常工作。

答案 4 :(得分:15)

我遇到了这个问题,结果与this problem over here相同。 This answer solved the problem for me

  
      
  1. 取消选中“仅在运行时构建启动项目和依赖项”(选项 - &gt;项目和解决方案 - &gt;构建并运行)
  2.   
  3. 在Configuration Manager中,确保启动项目和测试项目都已选中“Build”。
  4.   

我第二次遇到这个问题,是因为测试所在项目的文件路径中有一个&符号。它适用于ReSharper的测试运行器,但不适用于dotCover。从文件路径中删除&符号。

这是带有dotCover的confirmed bug

答案 5 :(得分:12)

对我而言,只需清洁并重建解决方案即可修复它。

答案 6 :(得分:11)

对我来说,问题是损坏 NUnit / ReSharper 设置XML文件(由于意外的电源短缺)。

要识别错误,我使用this command启动了Visual Studio:

devenv.exe /ReSharper.LogFile C:\temp\resharper.log /ReSharper.LogLevel Verbose

检查文件显示以下异常:

09:45:31.894 |W| UnitTestLaunch                | System.ApplicationException: Error loading settings file
System.ApplicationException: Error loading settings file ---> System.Xml.XmlException: Root element is missing.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.Load(String filename)
   at NUnit.Engine.Internal.SettingsStore.LoadSettings()
   --- End of inner exception stack trace ---
   at NUnit.Engine.Internal.SettingsStore.LoadSettings()
   at NUnit.Engine.Services.SettingsService.StartService()
   at NUnit.Engine.Services.ServiceManager.StartServices()
   at NUnit.Engine.TestEngine.Initialize()
   at NUnit.Engine.TestEngine.GetRunner(TestPackage package)
   at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.<>c__DisplayClass1.<RunTests>b__0()
   at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.WithExtensiveErrorHandling(IRemoteTaskServer server, Action action)

请注意,这是 NOT 测试项目的app.config!

围绕quick googling确定以下文件为罪魁祸首:

%LOCALAPPDATA%\NUnit\Nunit30Settings.xml

它存在但是空洞。删除它并重新启动Visual Studio解决了这个问题。

(使用Visual Studio Professional 2017 v15.3.5和ReSharper 2017.2.1)。

答案 7 :(得分:7)

我也解决了这个问题。但是,此线程中没有一个解决方案有效。这就是我做的......

由于R#没有详细说明事情失败的原因,我决定尝试内置的VS2013测试运行器。它经历了完全相同的行为,其中没有一个测试运行。但是,查看“输出”窗口,我最后收到一条错误消息:

  

调用执行程序时发生异常   &#39; executor:// mstestadapter / v1&#39;:对象引用未设置为实例   一个对象。

这让我找到了another thread on SO的解决方案。相信我,我永远不会猜到问题是什么。

我最近在创建NuGet包时对AssemblyInfo.cs文件进行了一些更改。其中一个变化包括指定&#34; en&#34;。

的汇编文化值

我改变了这个:

[assembly: AssemblyCulture("")] 

到此:

[assembly: AssemblyCulture("en")]`. 

就是这样!这是莫名其妙地破坏了我的单元测试的原因。然而,我仍然不明白为什么。但至少事情还在继续。在我恢复此更改后(即将文化设置回&#34;&#34;),我的测试再次开始运行。

希望能帮到那里的人。

答案 8 :(得分:6)

就我而言,[Test]方法只是private。 S-H-A-M-E

答案 9 :(得分:6)

在我的情况下,我在app.config中复制连接字符串时犯了一个错误。 我把它放在configSections标签里面了!

我花了一段时间才意识到这一点......感谢VS intellisense虽然..或者它是resharper?

答案 10 :(得分:6)

我的问题是我只用nuget安装了NUnit。我还没有安装NUnit3TestAdapter,这也是必需的。

Install-Package NUnit3TestAdapter

答案 11 :(得分:5)

我有类似的问题。 VS 2010,c#CLR 2 Nunit 2.5.7,刚刚构建&gt;来自VS的干净解决方案帮助解决了这个问题

答案 12 :(得分:5)

在我的情况下,我创建了一个返回void的异步测试方法。返回Task代替void解决了这个问题。

答案 13 :(得分:5)

我在Resharper Ultimate 2017.2的vs 2017 Update 3中遇到了这个问题

重新启动vs或重新启动计算机无济于事。

我通过清除缓存来解决问题,如下所示:

    Resharper ->options-> Environment ->click the button 'Clear caches'

更新

在测试窗口的右上角有一个“错误”按钮(我在Resharper 2018中找到)。

如果单击错误按钮,则会显示一条错误消息,可能有助于解决问题。

要跟踪问题的根源,请在日志模式下运行Visual Studio。在vs 2017中,运行命令:

      devenv /ReSharper.LogFile C:\temp\log\test_log.txt /ReSharper.LogLevel Verbose

运行测试。

查看日志文件test_log.txt并在文件中搜索“错误”。

日志文件对查找可以解决的错误或将日志文件的问题发送到technical support team of Resharper很有帮助。

答案 14 :(得分:4)

我正在使用VS2013,ReSharper 9.1以及来自ReSharper和Moq的MSpec扩展。我遇到了同样的“不确定”错误。

事实证明,来自Moq的我的一个Mock没有初始化,只是声明了。 Ones初始化了所有测试再次运行。

答案 15 :(得分:4)

对于.NET Core 2.0中我的测试项目Visual Studio 2017 Community (v15.3 3)遇到此问题的用户。我也使用JetBrains ReSharper Ultimate 2017.2 Build 109.0.20170824.131346犯了这个错误 - 我发布了bug

JetBrains建议从头开始创建一个新的测试项目来重现它。当我这样做并且测试工作正常时,我找到了导致问题的原因:

  • *.csproj文件中删除此内容:
  • Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}

当我这样做时 - 测试开始正常。

答案 16 :(得分:4)

在我的情况下,由于&#39;发布&#39;我收到此错误简单地关闭了UnitTests项目的构建模式。切换回&#39; Debug&#39;模式修复它。

令人惊讶的是ReSharper根本无法找到任何内容,以防它根本无法找到UnitTests库。说真的,这是一种耻辱;)

希望它会帮助某人

答案 17 :(得分:4)

就我而言,在我添加新项目后,解决方案中某些测试项目中的所有测试开始没有运行。在这里使用VS 2017和ReSharper 2017.1.2。

首先,请确保您没有浪费时间假设您的问题与ReSharper相关。如果您使用其单元测试功能(包括 Unit Test Explorer ),很容易假设ReSharper出现问题。在 Test 菜单下打开Visual Studio的 Test Explorer 并尝试全部运行“。这样做的另一个好处是输出窗口将显示一条错误消息,可能指向正确的方向。如果您注意到未运行同一组测试,则可以安全地假设问题出在Visual Studio而不是ReSharper。

我最终在 Configuration Manager 中删除并重新添加 Active解决方案平台 Any CPU 之一。通过这样做,在保存更改并重新打开解决方案后,所有测试再次开始运行。

我相信当我添加新项目并使用重新创建其中一个平台时,解决方案文件中存在意外的配置条目,它会自行更正。我尝试过差异化,但很难说出改变后导致问题的原因。

答案 18 :(得分:4)

您最近是否添加了任何DLL依赖项? ......跟我一样

我刚遇到同样的问题,在测试输出窗口或其他实际情况下没有任何线索是非常恼火的。

原因非常愚蠢:我刚刚将依赖项添加到子项目中的其他外部DLL,并且主项目App确实在更改后构建并正确运行。但我的单元测试是在主应用程序的姐妹项目中,因此也依赖于调用DLL的这个更改的子项目...但是,测试项目的运行时位置不是主应用程序的运行时位置! 因此,更改构建以将缺少的DLL复制到测试运行时目录中可以解决问题。

答案 19 :(得分:3)

我遇到了同样的问题。它与NUnit 3.5和Resharper 9.2之间的兼容性版本有关,因为它是通过从NUnit 3.5降级到2.6.4来解决的。 它对我有用。 祝你好运。

答案 20 :(得分:3)

由于缺少(未损坏)App.Config文件而导致。添加新的(添加 - >新项目... - &gt;应用程序配置文件)修复了它。

答案 21 :(得分:3)

如果您使用xUnit,我解决了安装xunit.running.visualstudio包的问题。 (目前正在使用xUnit 2.3.1VS17 Enterprise 15.3.5

答案 22 :(得分:3)

我使用NUnit框架运行任何测试都遇到了同样的问题。 &#34;不确定:测试没有运行&#34; Visual Studio 2017 15.5.6

ReSharper Ultimate 2017.3.3 Build 111.0.20180302.65130

已解决将项目依赖项添加到Microsoft.NET.Test.Sdk

答案 23 :(得分:3)

我的解决方案:

NUnit 3.2.0与Resharper有一些问题 - 降级到2.6.4:

update-package nunit -version 2.6.4

答案 24 :(得分:3)

我使用的是VS2010,NUnit 2.6.3(虽然内部ReSharper说它使用的是2.6.2?),ReSharper 7.7.1&amp; NCrunch 2.5.0.12并且遇到了同样的问题......测试没有结果......&#34; NUnit的事情,但NCrunch说一切都很好。今天的大部分时间都是NUnit&amp; NCrunch一致同意哪些测试很开心,哪些需要重构,然后发生了一些我仍然不理解的事情,并且有一段时间NCrunch说我没有通过测试(但是通过它们表明它们通过了),然后决定他们都在工作,NUnit开始抱怨我的所有测试,除了一个同样的消息&#34; ...测试没有结果......&#34;即使NUnit继续表现为&#34;没有结果&#34;),我再次能够单步进入传球。

我尝试了上面的几条建议无济于事,最后关闭了VS2010&amp;重新打开解决方案。瞧,我现在所有的测试都很高兴,NCrunch&amp; NUnit再次报告相同的结果。不幸的是,我不知道是什么改变导致他们不同步,但关闭&amp;重新开放VS2010似乎已经修复了它。

也许其他人会碰到这个并且能够使用这个简单的(如果最终不满意,因为你不知道真正的修复是什么)解决方案。

答案 25 :(得分:3)

在我的情况下,我的测试方法是私有的我将其更改为公开并且有效。

答案 26 :(得分:3)

我有同样的问题。罪魁祸首是外部参考与我的项目构建设置不兼容。为了解决这个问题,我右键点击了项目 - &gt; properties-&gt; build-&gt; Platform Target-&gt;从任何CPU更改为x86。

我正在使用的特定* .dll是System.Data.SQLite。特定的* .dll是32位操作的硬编码。 &#34;任何CPU&#34;设置尝试将其加载为64位。

答案 27 :(得分:2)

对于急于执行测试的人,我不得不使用VS 2017测试资源管理器来运行测试;

enter image description here

enter image description here

答案 28 :(得分:2)

此错误在Visual Studio 2017和Resharper版本2018.2.3中发生,但此修复适用于Visual Studio 2019版本。

要在Resharper中进行测试的修复程序只是在撰写本文时将其更新为最新版本的Resharper(2019.2.1)。

答案 29 :(得分:1)

我遇到了完全相同的问题,我的测试项目中没有运行任何测试。当它发生时,我在运行测试时选择了错误的配置。将其更改回Debug修复了问题。

Debug configuration

答案 30 :(得分:1)

我知道这个问题的答案是/ several /,但是我还有另一个独特的答案,我没有将其视为解决问题的一种方法。我希望这可以帮助其他人。

要使用单元测试会话,一个外部依赖项是Microsoft.Net.Test.Sdk,在VS管道中的某个点,xunit.runner.visualstudio对于ReSharper单元测试会话风格的测试运行器已停止正常工作。以下是我如何解决此问题的方法以及解决方法。

我的问题和答案来自于将我的一些net451库转换为netStandard 2.0以使我的团队能够在Core或Framework中进行开发时看到的不确定性。当我进入新近完成的netStandard2.0库并开始将其旧的单元测试项目转换为新的解决方案时,遇到了很多问题。您不能在标准的net项目中运行单元测试,因此对于我的单元测试项目,我选择降级为net472。

在这一点上,我将注意到,自.net Framework以来,.csproj文件进行了更改。为了与nupkg文件和.net Standard库的构建包完全集成,您需要更改引用以使用PackageReference而不是packages.config进行处理。

我有一些与Windows耦合的库,这些库无法转换为netStandard,因此在更新其依赖项以使用新的netStandard库时,我意识到如果他们的.csproj文件是旧的,则dotnet pack命令将会失败。格式。要解决此问题,不仅需要将它们从packages.config转换为PackageReference,还必须手动将.csproj文件更新为较新的VS2017格式。这样一来,这些库就可以像引用netStandard2.0依赖项的net472库一样干净地内置到nuget包中。

有一个工具可以为您转换程序包的组织行为,它保留旧的.csproj样式,并在.csproj中使用PackageReference。由于上述原因,我习惯了手动将.csproj样式迁移为VS2017格式。

总而言之,当我同时使用PackageReference作为依存关系和我的单元测试项目.csproj文件都是VS2017样式时,我收到了不确定的消息。

我能够通过删除项目,完全按照net472中的方式重新创建它来解决此问题,而不是将其转换为VS2017 .csproj格式,而是将其保留为旧格式。

无论出于何种原因,旧格式都可以完成我的测试会话。

我很好奇几件事:

  1. 如果很多有此问题的人在netCore版本中遇到过该问题,默认情况下.csproj文件采用新格式。
  2. 如果能够通过我的可再现问题/修复程序以外的其他方式解决问题的人是.csproj的netCore版本,并且也将netCore用作他们的测试项目。
  3. 如果该解决方案将通过重组或删除vs / bin文件夹或他们的.csproj文件中的其他条目来帮助无法解决该问题的任何人,

我不知道这个答案是ReSharper需要为每个人修复的一个真正的解决方案,但是它对我来说是可复制的,并且解决了将单元测试项目保留为旧版本.csproj的问题。文件,至少当我有一个引用netStandard2.0库的net472单元测试项目时。

还应注意,VS2017 .csproj文件不赞成在Properties文件夹中使用AssemblyInfo.cs文件,我不确定这是否也会导致单元测试会话出现问题。

答案 31 :(得分:1)

对于仍然无法解决问题的用户,请在管理Nuget软件包时检查Consolidate标签。

原来我们的单元测试项目引用了另一个版本,导致了这个完全模糊的错误。

答案 32 :(得分:1)

在我的案例中发现TestCaseSource的参数个数与测试方法中的参数不同。

[Test, TestCaseSource("DivideCases")]
public void DivideTest(int n, int d, int q)
{
    Assert.AreEqual( q, n / d );
}

static object[] DivideCases =
{
    new object[] { 12, 3 },
    new object[] { 12, 2 },
    new object[] { 12, 4 } 
};

这里DivideCases中的每个对象数组都有两个项,应该是3,因为DivideTest方法有3个参数。

答案 33 :(得分:1)

就我而言,我从unittestproject引用了2个项目。两个引用的项目都使用了具有相同名称的dll,但版本不同。

我在Visual Studio中没有注意到这一点。我注意到了Eventviewer中的错误。

为了解决这个问题,我在unittestproject的app.config中使用了bindingRedirect来修复dll版本。

答案 34 :(得分:1)

我遇到了完全相同的问题但没有任何帮助。

最终我发现我的单元项目和单元测试项目的命名空间不匹配。

我的单元项目的命名空间是unit.project,测试项目名为unit.project.tests,但测试的默认命名空间与单元相同,都是unit.project。

一旦我将命名空间更新为不同(每个项目一个命名空间),一切正常!

答案 35 :(得分:1)

对我来说,一次测试创建了这个错误,结果我无意中跳过了测试。在屏幕的左侧,您单击以放置断点,您可能会注意到您的测试被设置为跳过(有一个微软图标表示这一点)。我启用了测试,错误就消失了。

答案 36 :(得分:1)

非常奇怪的行为。

刚刚移动了最近添加到app.config底部的新appsetting条目解决了我的问题。

<appSettings>
    <add key="xxxxxx" value="xxxxx" />
</appSettings>

希望这有助于某人

答案 37 :(得分:1)

我在VS2013和Resharper9中遇到了同样的错误。问题是因为我忘了用[测试] :)注释测试方法 希望这有助于任何人

答案 38 :(得分:1)

我的班级的所有测试在一些代码更改后变得不确定(他们之前已经过去了)。

似乎我在测试类中添加了一个新字段:

private readonly Foo _foo = CreateFoo();

问题在于&#39; CreateFoo()&#39;内部抛出异常,所以它发生在所有测试中,而不是失败,它们都变得不确定。

答案 39 :(得分:1)

就我而言,ReSharper在测试窗口中给了我这个额外的例外:

2017.06.15 12:56:57.621   ERROR Exploration failed with the exception:
System.AggregateException: One or more errors occurred. ---> System.Threading.Tasks.TaskCanceledException: A task was canceled.
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at JetBrains.ReSharper.UnitTestFramework.Launch.Stages.DiscoveryStage.Run(CancellationToken token)
---> (Inner Exception #0) System.Threading.Tasks.TaskCanceledException: A task was canceled.<---
最后,在配置管理器中根本没有设置发出此错误的测试项目。选中复选框以构建2个测试项目并为我重新排序。

enter image description here

答案 40 :(得分:0)

当我升级到.NET Core 1.1.0

时,此问题就开始了

通过将以下依赖项添加到测试项目的project.json来解决:

"Microsoft.DotNet.InternalAbstractions": "1.0.500-preview2-1-003177"

答案 41 :(得分:0)

enter image description here

enter image description here

有时,只需尝试删除标头(.h)文件,然后将其重新添加为源(.cpp),即可。重命名。 在resharp c ++ && vs2019中进行测试,测试代码为Here

答案 42 :(得分:0)

就我而言(Visual Studio Community 2017版本15.2),问题的根源是加载VS 2017中引入的项目的新方法,即“轻量级解决方案负载”。

In&#34;单元测试会议&#34;窗口我注意到解决方案的测试方法应该少一些。我必须在&#34;解决方案资源管理器&#34;中手动打开每个单元测试项目。然后才加载并通过所有测试。

解决此问题的一种方法是禁用&#34;轻量级解决方案加载&#34;右键单击&#34;解决方案资源管理器&#34;并设置&#34;禁用轻量级解决方案加载&#34;。

答案 43 :(得分:0)

对我来说,问题是一个异步调用,它没有以任何方式等待。

   dc.Start(); // Asynchronous, it is mocked on this particular test, so i did not bother blocking the test.

将其更改为:

   dc.Start().ContinueWith(t =>
   {
        waitHandle.Set();
   });

   waitHandle.WaitOne(60000); // wait dc start

该测试再次开始适用。

答案 44 :(得分:0)

就我而言,我的应用程序配置文件app.config中有一个错误。我将appsettings放置在configSections上方,而不是将其放置在内部。因此,损坏的配置文件可能是Resharper无法运行响应不确定的测试的原因。

答案 45 :(得分:0)

我有一个测试类中的所有测试都因此问题而失败,其他所有运行正常。后来我在此类的测试之一中的[ignore]属性中发现错误。

答案 46 :(得分:0)

解决此问题的另一种方法:

在另一个环境(例如,TeamCity)中运行测试,然后查看您的REAL问题。我的问题是绑定重定向到System.Web.Mvc 5.2.6.0的错误(我的计算机上未安装)。

答案 47 :(得分:0)

我的问题已经通过最肤浅的解决方案得以解决:

将Moq nuget包添加到测试项目中解决不确定的测试方法,然后可以删除nuget包。

添加Moq软件包后,我的测试方法将使用以下nuget软件包运行:Castle.Core(4.4.0),Moq(4.13.1),NUnit(3.12.0),System.Runtime.CompilerServices.Unsafe(4.5 .0)和System.Threading.Tasks.Extensions(4.5.1)

在删除了上面的大多数nuget软件包之后,我的测试方法仍然仅使用NUnit(3.12.0)运行。

欣赏是否有人知道为什么会发生这种情况。

答案 48 :(得分:0)

在我的情况下,这是由于传入了TestCase中的\ r \ n字符。不知道为什么它会导致间歇性问题,因为它在大多数情况下都有效。但是,如果我删除\ r \ n,测试永远不会产生结果:

[TestCase("test\r\n1,2\r\n3,4", 1, 2)]
public void My_Test(string message, double latitude, double longitude)

答案 49 :(得分:0)

希望这对其他人有帮助,我的解决方法是更新软件包,进行了合并,并且使所有使用相同软件包的工作都为我解决了这个问题。 GL!

答案 50 :(得分:0)

我在解决方案中的项目之间的 nuget 依赖项中存在版本不匹配。使用 Visual Studio 中的整合功能有助于识别和解决此问题。

答案 51 :(得分:-1)

我使用ReSharper Build来解决这个问题。

ReSharper => Options => Tools => Build => General => Use ReSharper Build