当前位置: 首页 > 面试题库 >

UIApplication.sharedApplication()。delegate作为AppDelegate导致EXC_BAD_ACCESS在快速单元测试中使用它

孟子墨
2023-03-14
问题内容

我正在尝试快速使用单元测试来测试一些实际的应用程序行为。当我尝试 从测试函数中将de
强制转换UIApplicationDelegate为我的代码时AppDelegate,出现了EXC_BAD_ACCESS异常。测试代码下方:

func testGetAppDelegate(){

    let someDelegate = UIApplication.sharedApplication().delegate
    let appDelegate =  someDelegate as AppDelegate //EXC_BAD_ACCESS here
    XCTAssertNotNil(appDelegate, "failed to get cast pointer")
}

AppDelegate类设置为public,因此从访问级别来看这不是问题。

在同一测试目标中使用Objective-C可以正常工作。下面的简单说明:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

调试器说someDelegate是Builtin.RawPointer。不知道那是什么,我对低级细节不熟悉。


问题答案:

我认为您AppDelegate.swift已经将测试目标成员添加了。

当你这样做,AppName.AppDelegateAppNameTests.AppDelegate成为不同类别。然后,UIApplication.sharedApplication().delegate返回AppName.AppDelegate实例,但是您尝试将其强制转换为AppNameTests.AppDelegate类型。这导致EXC_BAD_ACCESS

取而代之的是,您必须从应用程序模块中导入它。

import UIKit
import XCTest
import AppName // <- HERE

class AppNameTests: XCTestCase {
   // tests, tests...
}

并且,AppDelegate必须声明类及其方法和属性public对测试模块可见。

import UIKit

@UIApplicationMain
public class AppDelegate: UIResponder, UIApplicationDelegate {

    public var window: UIWindow?

    public func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    // ...

同样,请确保AppDelegate.swift从测试目标成员中删除。



 类似资料:
  • 问题内容: 我下面有一个简单的课程 我在这里初始化 但是,这导致xcode打印出200 5s,然后由于EXC_BAD_ACCESS code = 2而崩溃。为什么会发生这种情况? 问题答案: @vadian在他的回答中提供了一个解决方案,它可以解决您的问题。让我解释一下发生了什么。 您已经创建了一个计算属性,即一个没有变量支持的属性,取而代之的是,getter和setter方法通常在另一个存储的属

  • 问题内容: 我注意到执行和启动任务有时会抛出EXC_BAD_ACCESS。给出错误的实际调用方法似乎有所不同,但始终来自。在大多数情况下,调用方法来自。我在下面附加了两个崩溃日志,其中包含不同的调用方。我还附加了的实现。 不幸的是,我无法可靠地重现该错误,因此没有共享的示例脚本。创建和启动对象最终将产生错误。较大的文件似乎更经常发生。我在这里实施错了吗?有没有一种好的方法可以从此堆栈跟踪进行调试?

  • 问题内容: 无论我做什么,sys.exit()都被unittest调用,即使是最琐碎的例子。我无法确定我的安装是否混乱或正在发生什么。 问题答案: 您的示例也在我的安装中退出。我可以通过更改使其执行测试并保留在Python中 至 在Python库参考中可以找到更多信息。

  • 我正在使用和Spy对函数进行单元测试。 这是正在测试的类: 我正在尝试使用Mockito和spy进行测试,因为我不想调用真正的函数只需验证一下即可。该测试称为 这是错误: 我也尝试过这样做,它会导致空指针:

  • 问题内容: 我的意图是使用API中描述的JUnit方法来验证类中的一种方法。 但是Eclipse向我显示了无法识别这种方法的错误消息。这两个进口到位: 我错过了什么? 问题答案: 这应该适用于JUnit 4: (答案基于此Wiki文章) 这与旧的JUnit框架(JUnit 3)相同: 注意区别:没有注释,测试类是TestCase的子类(实现静态断言方法)。

  • 我目前正在与CDI Unit合作一个项目,我遇到了一个奇怪的问题。我试图在一个简单的项目中重现它: 我有一个使用CdiRunner运行的测试类(如下所述:http://jglue.org/cdi-unit-user-guide/我的测试类注入了被测试的单元:UUD。这个类扩展了一个超级类“ParentTestClass”,它目前是无用的。 测试课。爪哇: 正如我提到的,父类是空的。 ParentT