iOS:用于测试的可编程网络链路调节器

iOS:用于测试的可编程网络链路调节器,ios,nsurlsession,Ios,Nsurlsession,在代码运行时,有没有一种方法可以通过编程为您自己的代码创建类似iOS的效果 我想测试的具体条件是“登录流的步骤1可以工作,但网络中断用于步骤2”。这很难手动测试,因为我想你必须设置一个断点,打开飞行模式,然后继续应用程序。这会引入观察错误,因为断点会影响应用程序的计时和控制流 理想情况下,您可以设置自己的延迟和退出参数,类似于实际的网络链路调节器,但即使只是能够在特定时间打开和关闭网络也足够了 最好的方法可能是使用模拟对象代替nsursession,该对象将数据传递到真实的nsursession

在代码运行时,有没有一种方法可以通过编程为您自己的代码创建类似iOS的效果

我想测试的具体条件是“登录流的步骤1可以工作,但网络中断用于步骤2”。这很难手动测试,因为我想你必须设置一个断点,打开飞行模式,然后继续应用程序。这会引入观察错误,因为断点会影响应用程序的计时和控制流


理想情况下,您可以设置自己的延迟和退出参数,类似于实际的网络链路调节器,但即使只是能够在特定时间打开和关闭网络也足够了

最好的方法可能是使用模拟对象代替
nsursession
,该对象将数据传递到真实的
nsursession
类或生成假错误。例如,在前缀头中,可以添加一个有条件的
#define
,用不同的类名替换
NSURLSession
,然后在头和包装类的实现文件中添加
#undef

您还可以通过旋转应用程序调用的各种方法并用自定义逻辑包装它们,将real
NSURLSession
类变成模拟对象


如果您决定使用swizzling方法,那么我建议您阅读以了解如何在swizzling过程中避免常见错误(尽管我想对于测试永远不会发布的代码来说,这有点不那么重要)。例如,在前缀头中,可以添加一个有条件的
#define
,用不同的类名替换
NSURLSession
,然后在头和包装类的实现文件中添加
#undef

您还可以通过旋转应用程序调用的各种方法并用自定义逻辑包装它们,将real
NSURLSession
类变成模拟对象

如果您决定使用swizzling方法,那么我建议您阅读以了解如何在swizzling过程中避免常见错误(尽管我想对于测试永远不会发布的代码来说,这有点不那么重要)