【问题标题】:Cocoa touch Framework with Unit tests带有单元测试的 Cocoa touch 框架
【发布时间】:2014-12-03 11:10:35
【问题描述】:

在带有 Objective-C 的 Xcode 6 中: 当我创建一个 Cocoa Touch 框架时,该项目已经有一个单元测试目标。

假设我的框架中有以下类和单元测试用例:

//Framework
@interface MyClass : NSObject
- (NSString*)greetings;
@end

@implementation MyClass 

- (NSString*)greetings {
  return @"Hello";
}
@end

// Test class
#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import "MyClass.h"
@interface MyClassTests : XCTestCase
@end

@implementation MyClassTests
- (void)testGreetings {
  MyClass *myClass = [[MyClass alloc] init];
  XCTAssertTrue([[myClass greetings] isEqualToString:@"Hello"]);
}
@end

当我尝试运行测试时,我得到:

架构 x86_64 的未定义符号: “_OBJC_CLASS_$_MyClass”,引用自: MyClassTests.o 中的 objc-class-ref

为什么测试目标没有找到我的课程?我不知道出了什么问题。我假设 Xcode 模板会正确设置所有内容。

【问题讨论】:

  • 我没有看到任何名为 MyClass 的类的接口声明,如果您在其他地方定义了接口,只需导入该标题
  • @deathhorse 我添加了缺失的行。仅导入并不能解决问题。 Cocoa Touch 框架的单元测试似乎与普通应用不同。
  • 嗯..可能您正在“设备”架构(如 armv7、armv7s 等)上构建框架,但不适用于模拟器。尝试在设备上运行相同的测试
  • 我现在已经创建了一个 cocoa touch 框架,但是我在上面运行测试没有问题。可能您的课程链接或项目设置已损坏..
  • 我创建了一个完整的新项目。更改正常和测试目标中的“有效架构”或“仅构建 Active Arch”都不能解决问题。为设备构建测试目标会产生相同的错误。无法在设备上运行单元测试。我不明白为什么一个完整的新项目不适合我。

标签: objective-c unit-testing xcode6 xctest


【解决方案1】:

你在 Build setting -> Valid Architecture x86_64 中添加这个 x86_64 架构并尝试一下。它可以工作。

参考架构:

armv7: Used in the oldest iOS 7-supporting devices
armv7s: As used in iPhone 5 and 5C
arm64: For the 64-bit ARM processor in iPhone 5S
i386: For the 32-bit simulator
x86_64: Used in 64-bit simulator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 2015-08-26
    • 1970-01-01
    • 2014-12-14
    • 2017-03-26
    • 2016-02-12
    • 1970-01-01
    • 2019-02-21
    相关资源
    最近更新 更多