我正在尝试快速使用单元测试来测试一些实际的应用程序行为。当我尝试 从测试函数中将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.AppDelegate
并AppNameTests.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