gpt4 book ai didi

ios - 如何在 iOS 中为预期的断言/断言失败编写单元测试?

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:34 24 4
gpt4 key购买 nike

更新:

看起来这个功能应该在即将推出的 Swift 2.0 中得到支持/XCode 7 版本,显然将包括 try/catch 优点,因此这个问题可能没有实际意义。当它们结束测试时,我会尝试相应地更新这篇文章。

原始问题:

在 Swift 中,虽然我假设问题/答案适用于 Objective-C,但我想编写一个格式为 foo 的函数:

public class SomeClass{
public func foo(someString:String){
//validate someString
assert(!someString.isEmpty, "The someString parameter cannot be empty.")
}
}

我使用 assert 调用,因为我相信这是 Apple 推荐的,而不是抛出异常,这在其他语言中很常见。

但是,在我的单元测试中,我希望能够确保函数在 someString 参数为空字符串时确实失败:

class SomeClass_Tests:XCTestCase{
func test_foo_someStringParamaterIsEmpty_error(){
//ACTION
let someClassInstance = SomeClass()
someClassInstance.foo("")

//VALIDATE
//**What goes here?
}
}

我找不到关于这种情况的文档或帖子,尽管我认为这是一个非常重要的单元测试,以确保类和库的正确行为和使用。

在其他包含异常/异常处理的语言中,assert 将被替换为类似 throw SomeError() 的内容,然后在单元测试中您可以简单地包装try/catch block 中的操作并断言确实设置了异常,如下所示:

class SomeClass_Tests:XCTestCase{
func test_foo_someStringParamaterIsEmpty_error(){
//ACTION
let someClassInstance = SomeClass()

var expectedException:SomeException? = nil
try{
someClassInstance.foo("")
}catch(someException:SomeException){
expectedException = someException
}

//VALIDATE
XCTAssertIsNotNil(expectedException)
}
}

但是我在文档中看到的 Swift 中没有这样的构造或等效的变通方法。执行此类测试是否有任何已知的解决方案或变通方法?

最佳答案

马特·加拉格尔的 CwlPreconditionTesting project on github添加一个 catchBadInstruction 函数,使您能够在单元测试代码中测试断言/前提条件失败。

CwlCatchBadInstructionTests file显示了其使用的简单说明。 (请注意,它仅适用于 iOS 模拟器。)

关于ios - 如何在 iOS 中为预期的断言/断言失败编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382194/

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