我试图在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以包含它们吗?
感谢您的建议!
答案 0 :(得分:3)
您能提供错误讯息吗?尝试点击左侧面板中嵌入三角形的感叹号图标:
尝试按下此面板底部的图标(它们负责错误/警告过滤)。也许你之前已经禁用了错误。
至于您的问题描述,似乎您还没有将此文件添加到测试目标。尝试选择TLSOrderLineEntity.m并检查此文件的测试目标:
答案 1 :(得分:3)
正确配置的测试目标可以访问生产目标中的所有内容。
在测试目标的“构建设置”中:
$(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp
$(TEST_HOST)
在测试目标的“常规”设置中:
答案 2 :(得分:0)
如果您只是添加了新的生产目标类文件,并且尝试导入它的标头(即使将'.m'文件添加到了单元测试目标中),由于XCode可能没有构建它的标头搜索路径,它也会失败。为新班级。特别是如果您为新文件添加新目录。在这种情况下,只需清理项目即可解决问题。