ar_dispatch: 测试中同步异步代码的调度函数解决方案

需积分: 9 0 下载量 103 浏览量 更新于2024-10-29 收藏 134KB ZIP 举报
资源摘要信息:"ar_dispatch:调度函数在测试中同步运行异步代码" 知识点: 1. Foundation框架 Foundation框架是苹果公司开发的一个面向对象的框架,它是macOS、iOS、watchOS和tvOS平台上开发应用的基础,提供了数据类型、集合、文件操作、网络通信、日志记录等基础功能的支持。在Objective-C编程中,Foundation框架是进行系统级开发不可或缺的一部分。 2. dispatch_xxx_函数 在Objective-C中,dispatch_xxx_函数是Grand Central Dispatch(GCD)的一部分,用于管理任务的异步执行。Grand Central Dispatch是苹果提供的一种强大且高效的多线程解决方案,可以让开发者以非常简洁的代码来利用多核心处理器,从而提升应用性能。 3. GCD同步与异步执行 同步执行指的是任务会按照提交的顺序依次执行,当前任务不完成不会执行下一个任务;而异步执行则不会阻塞当前线程,任务会放到一个队列中等待执行,当前线程可以继续执行后续代码。在多线程编程中,合理安排同步与异步执行是保证程序正确运行的关键。 4. 单元测试中的同步问题 在进行单元测试时,经常需要测试异步代码的行为,例如网络请求、数据库操作等。如果这些异步操作不被适当地同步,测试代码可能在被测试的操作完成之前就已经结束了,从而无法验证操作的正确性。为此,单元测试框架通常提供机制来处理异步代码的同步问题。 5. ar_dispatch的作用 ar_dispatch是一个第三方库或工具,其目的是为了解决在开发过程中进行单元测试时遇到的同步与异步代码执行问题。通过在测试目标中运行时将异步代码同步执行,而在应用程序目标中将代码异步执行,该工具可以帮助开发者更加方便地测试异步逻辑。 6. ar_dispatch_after ar_dispatch_after是ar_dispatch提供的一个方法,用于在测试代码中实现异步操作的同步执行。通过这个方法,开发者可以设置一个延时,之后将block代码块在主队列(main queue)中执行,确保测试代码可以等待异步操作完成后再继续执行,从而解决了测试异步操作时的同步问题。 7. Objective-C中的宏定义和函数声明 在Objective-C中,外部函数声明常使用extern关键字,表明该函数定义在别的地方。宏定义则用于创建符号常量和函数宏,让代码更加简洁易读。在资源摘要中提供的代码片段暗示ar_dispatch可能通过宏定义和函数声明的形式,对外提供其功能的接口。 8. 应用开发中的代码测试策略 在应用开发过程中,代码测试是一个重要环节,尤其是在编写涉及到异步操作的代码时。合理利用ar_dispatch这类工具,可以在不改变代码结构的前提下,使测试更加有效和便捷。这样开发者可以更容易地验证异步代码在不同情况下的表现,确保应用的稳定性和可靠性。 9. 跨平台和跨目标代码编译问题 ar_dispatch还涉及到跨平台和跨目标的代码编译问题。通过一套统一的API,开发者可以编写一套代码,在不同的目标(测试目标和应用程序目标)中表现不同的行为,这在保持代码可维护性和复用性方面非常有价值。 综上所述,ar_dispatch作为一个工具,通过封装Foundation框架中的dispatch_xxx_函数,为Objective-C开发者提供了一种在测试中同步运行异步代码的方法。它通过特定的函数声明和宏定义,使得开发者可以在测试时将异步操作同步执行,而在应用运行时保持异步特性,从而有效地简化了异步代码的测试流程。

def write(self, vals): audit = self.env['approval.flow'].search([('approval_cannot_run_id', '=', '修改')]) value_list = list(vals.keys()) receive_list = [] value_list_not_in_receive_list = [i for i in value_list if i not in receive_list] value_list = value_list_not_in_receive_list # 应付 dispatch_number = 0 dispatch_id = self.env['roke.dispatch.order.management.price.approve'].search([('order_id.id', '=', self.id)]) dispatch_list = ['value03', 'value04', 'value05', 'value06', 'value07', 'value08'] if dispatch_id: for rec in value_list: for dispatch_list_id in dispatch_list: if rec == dispatch_list_id: if dispatch_id.approval_status != '未提' and dispatch_id.approval_status != '驳回': raise UserError("应付费用已开始审核不允许修改") value_list_not_in_dispatch_list = [i for i in value_list if i not in dispatch_list] value_list = value_list_not_in_dispatch_list dispatch_number = 1 break if dispatch_number: break # 基础 base_number = 0 base_list = ['client', 'department_manager', 'box_number', 'shipping_companies', 'field_station', 'ship_name_voyage', 'port_of_discharge', 'box_type', 'code', 'bill__of_lading_number', 'departure_date', 'lead_sealing', 'booking_time', 'date_of_pick_up', 'encore_date', 'set_port_date', 'estimated_range', 'destination_port_arrival_time'] if value_list: for rec in value_list: for base_list_id in base_list: if rec == base_list_id: if dispatch_id: if dispatch_id.approval_status != '未提' and dispatch_id.approval_status != '驳回': raise UserError("应付费用已开始审核不允许修改") base_number = 1 break if base_number: break return super(Rokedispatchordermanagement, self).write(vals) audit审核完成如果是修改不能修改如果不是可以修改怎么写可以实现

2023-06-13 上传