XCode OCUnit 在运行任何测试代码之前崩溃并出现 Abort 陷阱:6

     2023-02-23     140

关键词:

【中文标题】XCode OCUnit 在运行任何测试代码之前崩溃并出现 Abort 陷阱:6【英文标题】:XCode OCUnit crashes with Abort trap: 6 before any test code is run 【发布时间】:2012-09-26 04:20:26 【问题描述】:

我有以下愚蠢的简单测试用例(在带有对应 .h 文件的 .mm 文件中定义)。它使用 boost 尝试从 stringstream 中读取 ptree 以模拟文件中的文本。

-(void)setUp 
  printf("setup\n");

  ::std::stringstream ss;
  ss << "bad format text";

  _configuration = new ptree();
  ::boost::property_tree::read_json(ss, *_configuration);

tearDown 函数什么都不做,并且有一个测试用例也什么也不做。如果我注释掉 read_json 行,一切正常。但如果我按原样运行它,我会得到:

Test Case '-[TestPlanner testPlanner]' started.
libc++abi.dylib: terminate called throwing an exception
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include: line 415:  3320 Abort trap: 6           "$THIN_TEST_RIG" "$OTHER_TEST_FLAGS" "$TEST_BUNDLE_PATH"
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/Developer/usr/bin/otest' exited abnormally with code 134 (it may have crashed).

真正疯狂的是,如果我在 SetUp 函数中设置断点,它甚至都不会运行!这是唯一启用的测试,因此即使没有运行单个测试的任何一行,也会发生崩溃。我知道测试设置正确,因为如果我注释掉 read_json 行并设置断点,它确实会到达,我可以在测试用例中包含一些断言,它们会按预期工作。

这也不仅仅是一个提升问题。我最初在从我自己的项目中调用不同的库时遇到了这个问题,但为了简化一切,我只使用了这个 boost 调用。这个完全相同的调用发生在代码的其他部分,所以我很确定我已经正确链接了 boost。我对命名空间非常冗长,所以我认为我没有链接错误版本的函数或其他东西。

我正在运行 XCode 4.5(但在 4.4.1 上遇到同样的问题)并尝试使用 OCUnit 编写单元测试。我正在处理的项目已经在这个框架中编写了一些单元测试,并且这些测试的所有内容似乎都可以正常工作。

我是 Objective C 和 XCode 的新手,但建立这个项目的人肯定不是,他看不出我所做的有任何问题,我们都完全被难住了。

感谢阅读!如果您需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

如果它得到一个 C++ 异常,结果是 OCUnit barfs,并且由于某种原因,XCode(或者可能是 lldb)没有正确触发断点。设置代码正在运行,调试器只是不工作。添加 try/catch 块或将代码更改为:

-(void)setUp 
  printf("setup\n");

  ::std::stringstream ss;
  ss << "";

  _configuration = new ptree();
  ::boost::property_tree::read_json(ss, *_configuration);

不会导致异常,并使一切正常。

因此,如果您遇到此问题,解决方法是确保您尝试/捕获测试用例中的所有内容。希望有人能提出更好的答案,因为这似乎是 OCunit 中的一个相当大的错误。

【讨论】:

OCUnit、NSLog 和 XCode 3.1

】OCUnit、NSLog和XCode3.1【英文标题】:OCUnit,NSLog,andXCode3.1【发布时间】:2009-07-0118:33:04【问题描述】:我一直在XCode3.0中使用OCUnit(XCode附带的默认安装)。我很高兴能够运行我的测试并在BuildResults窗口中查看结果,以及我输出的... 查看详情

Xcode 的 OCUnit 测试能否在 iOS 设备而不是模拟器上运行

】Xcode的OCUnit测试能否在iOS设备而不是模拟器上运行【英文标题】:CanXcode\'sOCUnittestsrunoniOSdeviceratherthansimulator【发布时间】:2012-07-0816:58:12【问题描述】:我正在尝试使用我的iPad运行OCUnit测试,但发现Xcode(版本4.3.3)总是即使... 查看详情

OCUnit 测试在未测试的类中给出错误

】OCUnit测试在未测试的类中给出错误【英文标题】:OCUnitTestsgivingerrorsinclassesnotbeingtested【发布时间】:2011-03-1621:57:12【问题描述】:我编写了一个OCUnit测试,它在Xcode3.2中运行良好,现在我在Xcode4中遇到了问题。它测试了A类中... 查看详情

iPhone 上的 ocunit 测试

】iPhone上的ocunit测试【英文标题】:ocunittestingoniPhone【发布时间】:2010-06-0819:16:40【问题描述】:我正在尝试让ocunit从XCode在我的项目中工作。因为我还需要在单元测试中进行调试,所以我使用了一个自动化设置的脚本(见下文... 查看详情

如何使用 Xcode 4 和 OCUnit 运行应用程序测试?

】如何使用Xcode4和OCUnit运行应用程序测试?【英文标题】:howtorunapplicationtestingusingXcode4andOCUnit?【发布时间】:2011-05-2909:53:59【问题描述】:我正在使用OCUnit编写单元测试,我尝试过GHUnit但它不适合我的情况。我确实想运行应用... 查看详情

延迟设备中的 OCUnit 执行 - xcode

】延迟设备中的OCUnit执行-xcode【英文标题】:delayOCUnitexecutionindevice-xcode【发布时间】:2011-04-0505:12:55【问题描述】:我可以使用一些示例代码在XCode4中运行OCUnit。但是,我想对其进行修改,以使测试运行的时间比启动时稍晚。... 查看详情

iOS – 每次在模拟器中运行应用程序时如何运行 OCUnit 测试

】iOS–每次在模拟器中运行应用程序时如何运行OCUnit测试【英文标题】:iOS–HowtorunOCUnittestseverytimeIrunmyapplicationinsimulator【发布时间】:2012-11-0315:54:09【问题描述】:如何配置以便每次选择在Xcode中的模拟器上运行我的应用程序... 查看详情

Xcode 4 中的 SenTest OCUnit

】Xcode4中的SenTestOCUnit【英文标题】:SenTestOCUnitinXcode4【发布时间】:2011-05-2717:44:07【问题描述】:我找不到任何关于在Xcode4中使用OCUnit测试的最新信息,即使它是一个重新设计的功能。Apple自己在Organizer中的文档来自2005年(OSX10.3... 查看详情

如何从命令行在 iPhone 上启动 OCUnit 测试

】如何从命令行在iPhone上启动OCUnit测试【英文标题】:HowcanIlaunchOCUnittestoniPhonefromCommandline【发布时间】:2013-03-2012:37:02【问题描述】:我想在不使用Xcode的情况下在iPhone上运行单元测试。是否有任何命令行实用程序可以在iPhone设... 查看详情

在 XCode 中组织 iOS OCUnit 测试文件

】在XCode中组织iOSOCUnit测试文件【英文标题】:OrganisingiOSOCUnittestfilesinXCode【发布时间】:2011-11-3011:07:16【问题描述】:我正在使用OCUnit和Xcode4.2向现有iOS项目添加单元测试。我已经成功添加了一个新的构建目标(按照此处的说明... 查看详情

OCUnit 测试从命令行失败,但在使用钥匙串服务时在 Xcode 中工作

】OCUnit测试从命令行失败,但在使用钥匙串服务时在Xcode中工作【英文标题】:OCUnittestsfailfromthecommandlinebutworkinXcodewhenusingKeychainServices【发布时间】:2012-04-0315:32:19【问题描述】:我正在使用SFHFKeychainUtils在我的应用程序中使用... 查看详情

OCUnit 可以依赖后台线程中的代码吗? (为了测试异步请求)

】OCUnit可以依赖后台线程中的代码吗?(为了测试异步请求)【英文标题】:CanOCUnitrelyoncodeinbackgroundthreads?(inordertotestasynchronousrequests)【发布时间】:2010-11-2918:55:06【问题描述】:我一直在尝试对异步请求进行自动化测试,但在... 查看详情

将 OCUnit 测试框架添加到现有 Xcode 项目时遇到问题

】将OCUnit测试框架添加到现有Xcode项目时遇到问题【英文标题】:TroubleAddingOCUnitTestingFrameworktoExistingXcodeProject【发布时间】:2013-05-2123:14:08【问题描述】:我正在尝试使用OCUnit测试框架将单元测试集成到我当前的Xcode项目中。我... 查看详情

如何在 Rust 中运行任何测试之前运行设置代码?

】如何在Rust中运行任何测试之前运行设置代码?【英文标题】:HowtorunsetupcodebeforeanytestsruninRust?【发布时间】:2019-09-1907:39:04【问题描述】:我有一个Rust应用程序(一个简单的解释器),需要在环境可用之前进行一些设置(初... 查看详情

OCUnit/XCode 单元测试的优秀测试运行器

】OCUnit/XCode单元测试的优秀测试运行器【英文标题】:GoodtestrunnerforOCUnit/XCodeUnitTests【发布时间】:2011-08-1917:31:10【问题描述】:对于OCUnit/XCode4单元测试框架,是否有一个好的基于GUI的测试运行器?我正在寻找一个红灯/绿灯类... 查看详情

如何在命令行中捕获 OCUnit 的测试失败/成功?

】如何在命令行中捕获OCUnit的测试失败/成功?【英文标题】:HowdoIcatchOCUnit\'stestfail/successincommandline?【发布时间】:2011-06-1401:29:32【问题描述】:我的期望:#构建成功#和#测试失败#实际结果:只有#BuildSucceeded#如何在命令行中获... 查看详情

为啥我的 OCUnit 测试失败并显示“代码 138”?

】为啥我的OCUnit测试失败并显示“代码138”?【英文标题】:WhydomyOCUnittestsfailwith"code138"?为什么我的OCUnit测试失败并显示“代码138”?【发布时间】:2009-07-0911:21:00【问题描述】:我目前正在尝试使用XCode3.1学习Objective-c... 查看详情

在 iOS 开发中使用 OCUnit 对 XCode 4.5 中的核心数据对象进行单元测试

】在iOS开发中使用OCUnit对XCode4.5中的核心数据对象进行单元测试【英文标题】:UnitTestingwithCoreDataobjectsinXCode4.5usingOCUnitiniOS-Development【发布时间】:2012-07-0219:34:00【问题描述】:是否有一种简单的方法来出于测试原因创建NSManagedOb... 查看详情