测试方法不确定:未运行测试。错误?

194

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

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,但仍然不起作用。


3
ReSharper已知存在这个问题。这里有一些可能的解决方案: https://dev59.com/JGct5IYBdhLWcg3wSrt3。 - Chris Mantle
3
你是否进行了清理和重新构建?我记得在使用VS2010时,更新和重新构建后可能会出现一些奇怪的问题,比如丢失对程序集的引用。 - Mark Walsh
@MarkWalsh 我正在使用VS2012。我按照您的建议清理并重新构建了解决方案,但仍然无法正常工作。 - Cybercop
是的。实际发生的是,我之前在应用程序中有另一个项目(领域模型)。现在这些项目已经作为NuGet包提供。但我已经安装了Nuget包。应用程序运行良好,只是测试不运行或显示不确定。 - Cybercop
9
这个问题在 meta 讨论区 上有讨论。 - gnat
显示剩余3条评论
58个回答

140

如果以上选项都不起作用,我想提醒大家注意一下 App.Config 中的损坏条目,可能是由于测试项目中缺少 nuget 包导致的。


6
这里也有同样的问题。如果R#能够将错误上浮(初始化配置系统错误),那么为什么测试没有运行就会变得很明显了。 - Geoffrey Hudik
5
谢谢,我的问题是我错误地将 appsettings 放在 configurations 的顶部,将其移至正确的位置后程序正常运行。 - anIBMer
3
我通过NuGet添加了SpecFlow,它在App.config中插入了一个条目,这就导致了问题的产生。我创建了一个新的App.config并再次添加了引用,问题得到了解决。感谢提供的信息。 - Vinee
我可以证实,即使在这篇文章最初发布近两年后,这仍然似乎是一个可行的解决方法(我正在使用VS 2015和ReSharper 9.2)。 - Steven D.
2
太好了!谢谢Chris。在我的情况下,是<configSections>中没有匹配的部分名称的log4net部分。 - datps
显示剩余4条评论

60

对我来说这很令人沮丧,但至少我找到了解决方案:

如果你的TestMethod是异步的,那么它不能是void。它必须返回Task。

希望能帮到某些人 :)


37

我曾经遇到与resharper相关的相同问题,通过更改一个选项来纠正了这个错误:

Resharper => 选项 => 工具 => 单元测试

我只需要取消选中“影子复制被测试的程序集”选项即可。


2
在查看了许多其他解决方案后,这对我很有帮助。我正在使用VS 2013和R# v8.1。 - Spikeh
10
对我来说没用,我正在使用带有Reshaper 10的VS2015。 - Nemeas
这对我来说解决了在一个NETCore测试项目中使用VS2017和Resharper Ultimate 2017.2.2的问题。 - Tasker
对我有用,现在我不必为测试清除构建。谢谢Elias。 - PhoenixPan

24

这是一个Resharper的问题。在Resharper选项->工具->MSTEST中,我取消了“使用传统运行器”的选项,现在它可以工作了。


66
在“工具”->“单元测试”->“MsTest”下,我没有那个选项。(Resharper 9.2) - cederlof
1
我在R# 2017.2中也没有这样的选项。 - realsonic
对我来说,选项是在“工具”->“单元测试”->“MsTest”下取消勾选即可。 - Marcel

20

我在使用 VS 2017 Update 3 和 Resharper Ultimate 2017.2 时遇到了这个问题。

重新启动 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并在文件中搜索“error”。

日志文件是帮助您找到可以解决的错误的好工具,或者您可以将带有日志文件的问题发送给Resharper的技术支持团队。 (链接)


1
窗口右上角的“错误”按钮,非常有用! :-) - SharpC
1
右上角的“错误”按钮帮了个大忙……原来是找不到文件(runntimeconfig.json)……最后发现完整路径太长了,我不得不重命名我的项目名称,现在它可以正常工作了…… - jcavandoli

15

对我来说,只需清理和重新构建解决方案即可解决问题。


当我在Git中切换分支时,我(不小心)还原了项目文件的更改。当我尝试通过右键单击类来运行测试(代码窗口仍然打开)时,它没有运行,因为它不是解决方案的一部分。 - mortb

15

我遇到了这个问题,结果发现它与这个问题相同。而这个答案解决了我的问题

  1. 取消选中"只在运行时构建启动项目和依赖项"(选项->项目和解决方案->构建和运行)
  2. 在配置管理器中,确保启动项目和测试项目都被选中“生成”。

第二次我遇到这个问题是因为测试所在的项目文件路径中有一个&符号。它可以在ReSharper的测试运行程序中正常工作,但在dotCover中不能。请从文件路径中删除&符号。

这是dotCover的一个已确认的错误


1
对我有用。VS2017与ReSharper 2017.1.3 :-) - Lars Holdgaard

13

对我来说,问题出在一个被破坏的 NUnit/ReSharper 设置 XML 文件上(由于意外的停电造成)。

为了确定错误,我使用这个命令启动了 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!

快速搜索确定以下文件是罪魁祸首:

%LOCALAPPDATA%\NUnit\Nunit30Settings.xml

它存在,但是为空。删除它并重新启动Visual Studio可以解决该问题。

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


8

我的问题是我只安装了Nuget的NUnit,但我没有安装也需要的NUnit3TestAdapter。

Install-Package NUnit3TestAdapter

这是那些让你对实际问题毫无头绪的令人沮丧的问题之一! - Ben Power

8

我刚刚也解决了这个问题,但是这个帖子里的任何解决方案都没有起作用。这是我做的事情:

由于R#没有提供任何关于失败原因的详细信息,因此我决定尝试使用内置的VS2013测试运行器。它遇到了完全相同的问题,其中没有一个测试运行。然而,在输出窗口中查看,我最终得到了一个错误消息:

enter image description here

在调用executor时出现异常 'executor://mstestadapter/v1':未将对象引用设置到对象的实例

这让我想到了SO上的另一个帖子,提供了一种解决方案。相信我,我永远不会猜出问题所在。

我最近在创建NuGet包时对AssemblyInfo.cs文件进行了一些更改。其中一项更改包括指定“en”的程序集文化值。

我把这个:

[assembly: AssemblyCulture("")] 

转换为:

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

就是这个问题!这就是导致我的单元测试出现了莫名其妙的问题。 我仍然不明白原因。但至少现在一切正常。在我恢复更改之后(即将区域设置设置回“”),我的测试又开始运行了。

希望能帮助到某些人。


1
我改变了汇编语言的文化,导致R#无法运行测试。 - Valentine Zakharenko
检查输出窗口揭示了我的问题,类不是公共的!谢谢! - Jony Feldman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接