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

jneque 发布于 2019-03-31 c# 最后更新 2019-03-31 12:17 167 浏览

我有一个测试课,下面我已经发布了测试课的样本测试

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,但它仍然无效。
已邀请:

zrerum

赞同来自:

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

rsequi

赞同来自:

在我的情况下,我得到了这个错误,因为'Release'模式,UnitTests项目的构建只是关闭。切换回“调试”模式修复它。 令人惊讶的是ReSharper根本无法找到任何内容,以防它根本无法找到UnitTests库。说真的,这是一种耻辱;) 希望它会对某人有所帮助

vomnis

赞同来自:

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

vvelit

赞同来自:

如果您使用Nunit:

对我而言,我包括以下DLL:
nunit.core
nunit.framework

但它实际上应该只是:nunit.framework

所以我删除了nunit.core,一切正常

menim

赞同来自:

我有同样的问题。罪魁祸首是外部参考与我的项目构建设置不兼容。为了解决这个问题,我右键单击了项目 - > properties-> build-> Platform Target->从Any CPU更改为x86。 我正在使用的特定 .dll是System.Data.SQLite。特定的 .dll是32位操作的硬编码。 “Any CPU”设置尝试将其加载为64位。

comnis

赞同来自:

我有完全相同的问题,没有任何帮助。 最终我看到我的单元项目和单元测试项目的命名空间不匹配。 我的单元项目的命名空间是unit.project,测试项目名为unit.project.tests,但测试的默认命名空间与单元相同,都是unit.project。 一旦我将命名空间更新为不同(每个项目一个命名空间)一切正常!

hid

赞同来自:

对于那些在Visual Studio 2017 Community (v15.3 3)中为我的测试项目.NET Core 2.0遇到此问题的人。我也使用了JetBrains ReSharper Ultimate 2017.2 Build 109.0.20170824.131346这个错误 - 我发布了一个bug。 JetBrains建议从头开始创建一个新的测试项目来重现它。当我这样做并让测试工作正常时,我找到了导致问题的原因:

  • 从您的*.csproj文件中删除它:
  • Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}"
当我这样做 - 测试开始正常。

cea

赞同来自:

由于任何可用答案未涵盖的原因,我遇到了同样的问题:我的一个测试(第一个执行的)处理的代码包含一个“Environment.Exit(-1)”调用。 该测试报告为Aborted,解决方案中的所有其他测试报告为“不确定:不运行”,如OP问题。

taut

赞同来自:

我很长一段时间都在努力解决这个问题,似乎没有上述答案解决我的问题。 我最终在我的案例中找到了原因: 我为“运行测试自”选项指定了一个文件夹。该文件夹不包含要测试的dll。 Resharper-> Options-> Tools-> Unit Testing,选择General下的Project output文件夹。

yautem

赞同来自:

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

fet

赞同来自:

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

  1. Uncheck "Only build startup projects and dependencies on Run" (Options -> Projects and Solutions -> Build and Run)
  2. In Configuration Manager, make sure both the start-up project and the Test project have "Build" checked.

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

pquis

赞同来自:

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

caut

赞同来自:

在我的情况下,它是由于传入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)

cvelit

赞同来自:

我升级到.NET Core 1.1.0时启动此问题 通过将以下依赖项添加到测试项目的project.json来解决:

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

uvero

赞同来自:

我正在使用VS2013,ReSharper 9.1和ReSharper和Moq的MSpec扩展。我遇到了同样的“不确定”错误。 事实证明,来自Moq的我的一个Mock没有初始化,只是声明了。 Ones初始化了所有测试再次运行。

oqui

赞同来自:

我正在使用VS2010,NUnit 2.6.3(虽然内部ReSharper说它使用2.6.2?),ReSharper 7.7.1& NCrunch 2.5.0.12和NUnit遇到了同样的“......测试没有结果......”但NCrunch表示一切都很好。今天的大部分时间都是NUnit& NCrunch一致同意哪些测试很开心,哪些测试需要重构,然后发生了一些我仍然不理解的事情,并且有一段时间NCrunch说我测试失败了(但是通过它们显示它们通过了),然后决定他们一切都在工作,NUnit开始抱怨我的所有测试,除了一个同样的消息“..测试是不确定的......”我再次能够单步进入通行证,即使NUnit继续表明它是“不确定的” “)。 我尝试了上面的几个建议无济于事,最后关闭了VS2010&重新打开解决方案。瞧,我现在所有的测试都很高兴,NCrunch& NUnit再次报告相同的结果。不幸的是我不知道是什么改变导致他们不同步,但关闭&重新开放VS2010似乎已经修复了它。 也许其他人会碰到这个并且能够使用这个简单的(如果最终不满意,因为你不知道真正的修复是什么)解决方案。

laut

赞同来自:

对我来说,只需清洁和重建解决方案就可以修复它。

yeum

赞同来自:

很奇怪的行为。 刚刚移动了一个新的appsetting条目,最近添加到app.config的底部解决了我的问题。

<appSettings>
    <add key="xxxxxx" value="xxxxx" />
</appSettings>
希望这有助于某人

eomnis

赞同来自:

在我的情况下,[Test]方法只是private。耻辱

xeos

赞同来自:

我正在使用VS2012并完成其中的大部分工作。感谢欧洲顶级的UV开发人员,他建议卸载并重新安装specflow。这解决了这个问题! 希望这可以帮助其他人。

jautem

赞同来自:

我的解决方案 NUnit 3.2.0与Resharper有一些问题 - 降级到2.6.4:

update-package nunit -version 2.6.4

fharum

赞同来自:

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

zhic

赞同来自:

就在上述选项的情况下没有工作的人我已修正这个错误的情况下通过注意我App.Config中损坏的条目由于缺少NuGet包的测试项目。

xporro

赞同来自:

就我而言,在我添加新项目之后,解决方案中某些测试项目中的所有测试都没有开始运行。在这里使用VS 2017和ReSharper 2017.1.2。 首先,请确保您没有浪费时间假设您的问题与ReSharper相关。如果使用单元测试功能(包括单元测试资源管理器),很容易假设ReSharper出现问题。在“测试”菜单下打开Visual Studio的“测试资源管理器”,然后尝试“全部运行”。执行此操作的另一个好处是,输出窗口将显示可能指向正确方向的错误消息。如果您注意到同一组测试没有运行,那么可以安全地假设问题是Visual Studio而不是ReSharper。 我最终在Configuration Manager中删除并重新添加了一个Active解决方案平台Any CPU。通过这样做,在保存更改并重新打开解决方案后,所有测试都重新开始运行。 我相信当我添加新项目并使用重新创建其中一个平台时,解决方案文件中存在意外的配置条目,它会自行更正。我尝试过差异化,但很难说出改变的原因导致了这个问题。

vomnis

赞同来自:

对我来说这是相当令人沮丧的,但我至少找到了我的案例的解决方案: 如果您的TestMethod是异步的,则它不能为空。它必须返回任务。 希望它可以帮助别人:)

iqui

赞同来自:

在一些代码更改后(他们之前通过),我班级的所有测试都变得不确定了。 看来我在测试类中添加了一个新字段:

private readonly Foo _foo = CreateFoo();
问题是在'CreateFoo()'中抛出了一个异常,因此它发生在所有测试中,而不是失败,它们都变得不确定。

uin

赞同来自:

我有与resharper相同的问题,我通过更改选项更正了此错误: Resharper => Options => Tools =>单元测试 我只需取消选中“正在测试的影子复制程序集”选项

dquis

赞同来自:

在我的例子中,我创建了一个异步测试方法,返回void。返回Task而不是void解决了这个问题。

det

赞同来自:

这是一个Resharper问题。在Resharper选项 - >工具 - > MSTEST中,我取消选中Use Legacy Runner,现在它可以正常工作。

gut

赞同来自:

在我的情况下,我不得不重命名我添加的名为Configuration.dll的新引用。显然,Typemock有自己的Configuration.dll(很棒的命名!),它被我的DLL搞糊涂了。

uet

赞同来自:

我正在使用VS2013,Resharper 8.2和NUnit(Runner)2.6.3。 Configured Resharper使用通过nuget安装的nunit runner。 尝试使用resharper运行单元测试时,我得到了相同的“不确定:测试未运行”错误。尝试不同的解决方案后,我尝试启动nunit.exe并抛出错误“要运行此应用程序,首先必须安装.NET.Framework的以下版本之一:V4.0.30319” 修复我的.net framework 4.5安装后,一切正常。

znihil

赞同来自:

如果您使用XUnit& Resharper,你可以尝试更新XUnit扩展(为我工作)。

sesse

赞同来自:

就我而言,VS没有以管理员权限启动。 退出VS,然后选择“以管理员身份运行”,此问题将得到解决。

matque

赞同来自:

在我的情况下,我在app.config中复制连接字符串时犯了一个错误。 我把它放在configSections标签里面! 花了一些时间才意识到......感谢VS intellisense虽然..或者它是resharper?

wnatus

赞同来自:

就我而言(Visual Studio Community 2017版本15.2),问题的根源是加载VS 2017中引入的项目的新方法,即“轻量级解决方案负载”。 在“单元测试会话”窗口中,我注意到解决方案的测试次数应该少于应该。我必须在“解决方案资源管理器”中手动打开每个单元测试项目,然后才加载并传递所有测试。 解决此问题的一种方法是通过右键单击“解决方案资源管理器”中的解决方案并设置“禁用轻量级解决方案加载”来禁用“轻量级解决方案加载”。

nrerum

赞同来自:

在我的例子中,我引用了我的unittestproject中的2个项目。两个引用的项目都使用了具有相同名称的dll,但使用的版本不同。 我在Visual Studio中没有注意到这一点。我注意到了Eventviewer中的错误。 为了解决这个问题,我在unittestproject的app.config中使用了bindingRedirect来修复dll版本。

in_id

赞同来自:

我今天遇到了同样的问题。如果这些答案都没有帮助你,试试这个: 在控制台应用程序中转换类库。然后尝试找到LoaderExceptions,解释如下:How to diagnose Resharper Unit Test Runner "Unable to load one or more of the requested types" error 如果您的项目没有任何异常启动,请尝试使用resharper运行测试。 (没有转换回类库)它对我有用。

fet

赞同来自:

我有类似的问题。 VS2010,c#CLR 2 Nunit 2.5.7,刚建立> VS的干净解决方案帮助解决了这个问题

iaut

赞同来自:

我有一个类似的场景 - 我的所有测试都运行良好,我添加了几个,突然我的测试没有在VS2015中使用R#10运行。 我尝试清除R#缓存,恢复app.config更改,删除“正在测试的卷影复制程序集”,清理/重建,重新启动VS - 一切都无济于事。 最后,一个很好的老式重启解决了我的问题。

ut_sed

赞同来自:

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

lquia

赞同来自:

因为ReSharper给了我一个艰难的时间。我决定用NUnit3测试适配器快速测试它 https://visualstudiogallery.msdn.microsoft.com/0da0f6bd-9bb6-4ae3-87a8-537788622f2d

dab

赞同来自:

在我的情况下,这是因为测试方法是“静态的”

gautem

赞同来自:

我刚刚解决了这个问题。但是,此线程中的解决方案都没有奏效。这就是我做的...... 由于R#没有详细说明事情失败的原因,我决定尝试内置的VS2013测试运行器。它经历了完全相同的行为,其中没有任何测试运行。但是,查看“输出”窗口,我终于收到一条错误消息:

An exception occurred while invoking executor 'executor://mstestadapter/v1': Object reference not set to an instance of an object.
这使我得到了another thread on SO的解决方案。相信我,我永远不会猜到问题是什么。 我最近在创建NuGet包时对AssemblyInfo.cs文件进行了一些更改。其中一个更改包括指定汇编文化值“en”。 我改变了这个:
[assembly: AssemblyCulture("")] 
对此:
[assembly: AssemblyCulture("en")]`. 
就是这样!这就是莫名其妙地破坏了我的单元测试。但是,我仍然不明白为什么。但至少事情还在继续。在我恢复此更改(即将文化设置回“”)后,我的测试再次开始运行。 希望能帮到那里的人。

id_cum

赞同来自:

在我的例子中发现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个参数。

riure

赞同来自:

对我来说,问题是损坏的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)
请注意,这不是测试项目的app.config! quick googling周围将以下文件识别为罪魁祸首:
%LOCALAPPDATA%\NUnit\Nunit30Settings.xml
它存在,但是空洞的。删除它并重新启动Visual Studio解决了这个问题。 (使用Visual Studio Professional 2017 v15.3.5和ReSharper 2017.2.1)。

inemo

赞同来自:

在我的情况下,我需要升级我的ReSharper(至v.10),因此它可以使用最新版本的NUnit(v.3.0)

snon

赞同来自:

在我的情况下,我的测试方法是私有的,我把它改为公共,它工作。

tin

赞同来自:

就我而言,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

wsint

赞同来自:

只是抛出另一种可能发生的方式,测试本身的某些类型的运行时错误。 我遇到了一个未被捕获的堆栈溢出异常,它发生在我正在测试的属性中(使用VisualStudioTestingExtensions)。我有一个属性(如“IsFoo”),它本身有一个Select来检查子对象上的IsFoo。但是错误地使用了foo.Select(x => IsFoo)而不是foo.Select(x => x.IsFoo)。 因此,如果您在单个测试中看到“测试方法不确定......”,请确保您也进行了调试运行。这将揭示是否是这个特殊问题(因为它将在异常点停止)。

xet

赞同来自:

发生了同样的事情发生在我身上。最后从VS2010升级到2013年,并没有任何单元测试出现在VS的列表中,Resharper将它们全部列为忽略。我几乎尝试了这里列出的所有内容都无济于事。结束创建一个全新的单元测试项目并将旧的.cs文件复制到新的,重新创建的引用等等,一切正常。我的猜测是测试项目中的某些内容在升级过程中被破坏了。

ncum

赞同来自:

你最近添加了任何DLL依赖吗? ... 像我这样的 我刚刚遇到了同样的问题,并且在测试输出窗口或其他实际应用中没有任何线索是非常恼人的。 原因是非常愚蠢的:我刚刚将依赖项添加到子项目中的其他外部DLL,并且主项目App确实在更改后构建并正确运行。但我的单元测试是在主应用程序的姐妹项目中,因此也依赖于调用DLL的这个更改的子项目...但是,测试项目的运行时位置不是主应用程序的运行时位置! 因此,更改构建以将缺少的DLL复制到测试运行时目录中可以解决问题。