gpt4 book ai didi

iOS 测试 : dispatch_once get called twice. 应用程序第一,测试第二。观察者的问题

转载 作者:技术小花猫 更新时间:2023-10-29 10:55:04 26 4
gpt4 key购买 nike

我有一个将在应用委托(delegate)中创建的单例类。

当我运行 XCTTests 时,它会第二次创建。

+ (instancetype)urlSchemeManager
{
static dispatch_once_t onceToken;
static UrlSchemeManager* _sharedInstance;

dispatch_once(&onceToken, ^{

_sharedInstance = [UrlSchemeManager new];


});
return _sharedInstance;
}

这导致了两个不同的实例。如果我只是将它用于单元测试,这没问题。但是在集成测试中,当我为 urlSchmemeManager 注册一个观察者时,我得到了一个 EXC_BAD_ACCESS,因为它已经被 rootViewController(在 UI 中)观察到了。

在 RootViewController 中:

UrlSchemeManager * schemeManager = [GlobalSpace globalSpace].urlSchemeManager;
[schemeManager addObserver:self forKeyPath:OBSERVER_KEY_URL_SCHEME_MANAGER_CONTENT_MORE options:NSKeyValueObservingOptionNew context:nil];

有谁知道我该如何解决这个问题?

最佳答案

我在运行测试套件时多次调用 dispatch_once 时遇到了同样的问题。我通过从测试的目标成员中删除单例类来修复它。

完成后,请确保您的测试目标依赖于“构建阶段”中的应用程序,以便测试仍然了解该类。

之后,测试应该运行并且单例应该只被实例化一次。

关于iOS 测试 : dispatch_once get called twice. 应用程序第一,测试第二。观察者的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21014843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com