导入头文件时单元测试失败

时间:2016-02-15 12:59:28

标签: ios objective-c unit-testing xctest

我试图在Objective-C中的项目中实现单元测试。 问题是,当构建失败时,我没有任何错误消息,经过几次测试后,我无法弄清楚如何执行构建。

- (void)setUp {
    [super setUp];

    self.order = [[TLSOrderEntity alloc] init];

    self.calculateVatDictionary = [[NSDictionary alloc] init];

    self.price100 = [NSNumber numberWithInteger:100];
    self.price200 = [NSNumber numberWithInteger:200];

    self.tax5 = [NSNumber numberWithFloat:5.5];
    self.tax10 = [NSNumber numberWithInteger:10];
    self.tax20 = [NSNumber numberWithInteger:20];
}

这种方法很好,可以构建,并且工作正常。当我试图导入其他标头并尝试分配相应的对象时,构建会立即失败。

#import "TLSOrderLineEntity.h"

- (void)testExample {
    TLSOrderLineEntity *line1 = [TLSOrderLineEntity createEntityLineWithName:@"PRODUIT" price:self.price100 tax:self.tax10 extraLines:nil];
}

我还有其他接口可以在没有错误的情况下获取私有方法,并声明很少的属性:

#import <XCTest/XCTest.h>
#import <UIKit/UIKit.h>
#import "TLSOrderTaxManager.h"

@interface TLSOrderTaxManager (Test)

+ (NSDictionary *)calculateVatForLines:(TLSOrderEntity *)order;

@end

@interface TLSTaxTests : XCTestCase

@property (nonatomic, strong) TLSOrderEntity    *order;
@property (nonatomic, strong) TLSOrderLineEntity *orderLine;

@property (nonatomic, strong) NSDictionary      *calculateVatDictionary;

@property (nonatomic, strong) NSNumber          *price100;
@property (nonatomic, strong) NSNumber          *price200;

@property (nonatomic, strong) NSNumber          *tax5;
@property (nonatomic, strong) NSNumber          *tax10;
@property (nonatomic, strong) NSNumber          *tax20;

@end

正如我之前所说,我没有任何线索可以理解它失败的原因。 有依赖问题吗?或者我应该编译相应的.m以包含它们吗?

感谢您的建议!

3 个答案:

答案 0 :(得分:3)

您能提供错误讯息吗?尝试点击左侧面板中嵌入三角形的感叹号图标:

enter image description here

尝试按下此面板底部的图标(它们负责错误/警告过滤)。也许你之前已经禁用了错误。

至于您的问题描述,似乎您还没有将此文件添加到测试目标。尝试选择TLSOrderLineEntity.m并检查此文件的测试目标: enter image description here

答案 1 :(得分:3)

正确配置的测试目标可以访问生产目标中的所有内容。

在测试目标的“构建设置”中:

  • 将“测试主机”设置为您的应用。像$(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp
  • 之类的东西
  • 将“Bundle Loader”设置为$(TEST_HOST)

在测试目标的“常规”设置中:

  • 指定主机应用程序。确保选中“允许测试主机应用程序API”复选框。

Host Application setting

答案 2 :(得分:0)

如果您只是添加了新的生产目标类文件,并且尝试导入它的标头(即使将'.m'文件添加到了单元测试目标中),由于XCode可能没有构建它的标头搜索路径,它也会失败。为新班级。特别是如果您为新文件添加新目录。在这种情况下,只需清理项目即可解决问题。