我正在编写一个单元测试来检查我传递给 GAITracker
类的字符串是否作为每个屏幕的 kGAIScreenName
属性返回。
但是,当我尝试将 sharedInstance
传递给 GAI
类以初始化 WNGoogleAnalyticsService
实例时,出现错误 Thread 1: EXC_BAD_ACCESS (code=1, address=0x20)
就好像没有分配到内存一样。无论我在哪里尝试声明 sharedInstance 都不会在测试类中初始化,尽管它在 AppDelegate.m
中工作正常。
WNGoogleAnlayticsServiceTest.m:
-(void)testIfNoScreenNameExists {
NSString *screenName = @"Screen";
Class builder = [GAIDictionaryBuilder class];
GAI *gai = [GAI sharedInstance];
WNGoogleAnalyticsService *s = [[WNGoogleAnalyticsService alloc] initWithGAInstance:gai
gaKey:@"test"
gaDictionaryBuilderClass:builder
debugging:NO];
id<GAITracker> tracker = [s trackerForScreen:screenName];
XCTAssertEqualObjects([tracker get:kGAIScreenName], screenName);
}
AppDelegate.m:
Add Google Analytics as analytics service
WNGoogleAnalyticsService *googleAnalyticsService = [[WNGoogleAnalyticsService alloc] initWithGAInstance:[GAI sharedInstance]
gaKey:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"WNGoogleKey"]
gaDictionaryBuilderClass:[GAIDictionaryBuilder class]
debugging:analyticsDebugging];
我什至不知道如何修复这个错误,所以我们将不胜感激。
最佳答案
根据我在问题下方留下的评论,我觉得我应该用我的解决方案正式回答这个问题。
在这个单元测试的情况下,我试图通过在我的 WNGoogleAnlayticsServiceTest 和我的 AppDelegate.m 文件中重用 [GAI SharedInstance]
方法来重用单例,根据定义,它做不到。
因此,如果您想测试 Google Analytics 方法,您必须使用像 OCMock 这样的工具来这样做,因为您不能将 sharedInstance 初始化两次。
关于objective-c - 在 XCode 6 中对 Google Analytics 跟踪器进行单元测试时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30866475/