我正在尝试编写一个测试,我的下一个测试应该有一个新的应用程序会话,这样我在之前的测试中所做的所有活动都被清除了。我想知道KIF是否可行?
答案 0 :(得分:0)
这是不可能的,因为KIF是从分离的目标实例化的。此外,由于系统不允许,因此无法进行新的应用会话。
答案 1 :(得分:0)
我为这个答案做了很多研究,所以我不准确。谨慎使用这些建议:)
let request = NSMutableURLRequest(url: url!, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 60)
let shared1 = URLSession.shared
let shared2 = URLSession.shared
let default1 = URLSession.init(configuration: .default)
let default2 = URLSession.init(configuration: .default)
print("shared1 session was \(shared1) urlCache: \(shared1.configuration.urlCache)")
print("shared2 session was \(shared2) urlCache: \(shared2.configuration.urlCache)")
print("default1 session was \(default1) urlCache: \(default1.configuration.urlCache)")
print("default2 session was \(default2) urlCache: \(default2.configuration.urlCache)")
会打印:
shared1 session was <__NSURLSessionLocal: 0x7f976ac0fdd0> urlCache: Optional(<NSURLCache: 0x60400000fb20>)
shared2 session was <__NSURLSessionLocal: 0x7f976ac0fdd0> urlCache: Optional(<NSURLCache: 0x60400000fb20>)
default1 session was <__NSURLSessionLocal: 0x7f976ac10b50> urlCache: Optional(<NSURLCache: 0x60400000fb20>)
default2 session was <__NSURLSessionLocal: 0x7f976ac11170> urlCache: Optional(<NSURLCache: 0x60400000fb20>)
如您所见,shared
会话将使用相同的引用,因此会使用相同的会话/缓存。
default
它与众不同。 (我没有初始化我的共享会话。我只是设置指向它们的指针)。然而对于default
,我创建了一个新指针!
据说默认会话的默认缓存也使用共享缓存!这意味着如果您创建2个不同的默认会话实例,那么他们不必下载图像两次!所以你还有问题!
对于默认会话,默认值为共享URL缓存 宾语。
Apple文档:urlCache
您可以做的是创建一个全新的urlCache并使用它进行更改。
let memoryCapacity = 50 * 1024 * 1024
let diskCapacity = 50 * 1024 * 1024
let cache = URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "myDataPath")
URLCache.shared = cache
每次需要新会话时都这样做。
URLCache.shared = cache
部分将更改用于共享和默认会话的会话。
我能想到的其他一些选择:
ephemeral
会话并在之后失效使用短暂的会话:
确保您看到链接!
临时会话配置对象类似于默认值 会话配置对象,但相应的会话除外 对象不存储缓存,凭据存储或任何 与会话相关的数据到磁盘。
let session = URLSession.init(configuration: .ephemeral)
session.invalidateAndCancel()
在测试结束时,也许在里面:afterAll
,执行session.invalidateAndCancel()
,这样:&#34;取消所有未完成的任务,然后使会话无效。&#34;
您也可以使用默认会话,然后使会话无效,但短暂会话可能会更好地满足您的需求。短暂有点像私人浏览。 (正如文档所说,你不能使共享会话无效,所以不要尝试使用它!)
我还没有使用过KIF,但我确实记得beforeAll
有点儿错误。我不确定它的afterAll
是否也是如此,所以确保它实际上被称为
reloadIgnoringLocalCacheData
这基本上意味着,对于此网址,请勿使用缓存数据!
let url = URL(string:"https://static.pexels.com/photos/132037/pexels-photo-132037.jpeg")
let request = NSMutableURLRequest(url: url!, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 60)
对于大多数情况,你会.useProtocolCachePolicy
作为你的cachePolicy,但不是这里!
使用useProtocolCachePolicy
,只需符合到标题响应中获得的任何cachePolicy。如果将其设置为缓存5天,那么您将在本地缓存5天,直到再次发出实际的URL请求为止!
如果你使用.reloadIgnoringLocalCacheData
那么它只会覆盖标题指定的任何缓存策略,并且总是再次从服务器请求。
如果我是你,我会为我的网络请求编写一个包装函数,并默认它们都使用这个.reloadIgnoringLocalCacheData
cachePolicy。
0
let memoryCapacity = 0
let diskCapacity = 0
cache = URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "myDataPath")
URLCache.shared = cache!
AFAIK此缓存大小会影响整个应用!我不确定您是否可以在应用程序中创建不同的缓存,或者为每个会话创建不同的缓存,这有点辜负了目的!
这样就没有任何好的缓存!