objective-c - 在 XCode 6 中对 Google Analytics 跟踪器进行单元测试时出现错误

标签 objective-c xcode google-analytics

我正在编写一个单元测试来检查我传递给 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/

相关文章:

objective-c - Cocoa nsview 改变光标

swift - 为什么不 becomeFirstResponder 在警报消息文本字段上触发软键盘

google-analytics - 谷歌通用分析实时不工作

ios - 不需要按钮帮助的 Segue

ios - 如何使用 Superpowered 从麦克风进行实时音调转换?

objective-c - 带有字体名称和粗体的 UITextView 格式

jquery - Google Analytics 和 jQuery fullpage.js

angular - 如何在 Angular Cli 应用程序中包含 Google Analytics

iOS 内存警告发送到释放的 UIViewController

objective-c - 持久存储的核心数据错误