gpt4 book ai didi

ios - 如何使用 XCTAssertEqual 与可选模型属性进行比较

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:02 25 4
gpt4 key购买 nike

有没有比以下看起来非常冗长且仅针对一个属性的代码段更好的方法来比较我的模型对象中的值?

模型对象

struct Address {

static let kADDRESS1 = "address1"
static let kADDRESS2 = "address2"
static let kADDRESS3 = "address3"
static let kCITY = "city"
static let kSTATE = "state"
static let kPOSTAL_CODE = "postalCode"

var address1:String?,
address2:String?,
address3:String?,
city:String?,
state:String?,
postalCode:String?

init(address1: String?,
address2: String?,
address3: String?,
city: String?,
state: String?,
postalCode: String?) {
self.address1 = address1;
self.address2 = address2;
self.address3 = address3;
self.city = city;
self.state = state;
self.postalCode = postalCode;

}
init(params:NSDictionary) {
self.init(address1: params.objectForKey("address1") as String?,
address2: params.objectForKey("address2") as String?,
address3: params.objectForKey("address3") as String?,
city: params.objectForKey("city") as String?,
state: params.objectForKey("state") as String?,
postalCode: params.objectForKey("state") as String?)
}
}

来自测试用例 func testCreateAddress() {

let params:NSDictionary = [Address.kADDRESS1: "1 Main St.", Address.kADDRESS2: "Apt. 1", Address.kADDRESS3: "Box 1", Address.kCITY: "San Francisco", Address.kSTATE: "CA", Address.kPOSTAL_CODE: "7899"];

let address = Address(params:params);

if let param = params[Address.kADDRESS1] as String? {
if let property = address.address1 {
XCTAssertEqual(property, param)
}
else {
XCTFail("properties do not match")
}
}
else {
if let property = address.address1 {
XCTFail("properties do not match")
}
}

最佳答案

我认为您可以在测试中假设一些事情:

  1. XCTAssertEqual 会让您的测试失败(并出现适当的错误消息)如果字符串不相等,因此您不需要任何 XCTFail

  2. params[Address.kADDRESS1] 绝对设置为您刚刚定义的以上

所以我建议将您的测试更改为如下所示:

let params:NSDictionary = [Address.kADDRESS1: "1 Main St.", Address.kADDRESS2: "Apt. 1", Address.kADDRESS3: "Box 1", Address.kCITY: "San Francisco", Address.kSTATE: "CA", Address.kPOSTAL_CODE: "7899"]

let address = Address(params:params)
XCTAssertNotNil(address.address1)
XCTAssertEqual(address.address1!, params[Address.kADDRESS1], "address1 should be set")

我承认,如果 address.adress1 为 nil,您将得到运行时异常,因为 XCTAssertEqual 将无法解包变量,但 XCTAssertNotNil 会事先失败,所以你知道发生了什么。

关于ios - 如何使用 XCTAssertEqual 与可选模型属性进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25278892/

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