当我尝试运行UI测试时,Xcode 7.3.1给出了这个错误:
案文是:
Setting up profile generation failed
Xcode could not generate profile information for bundle identifier (com.apple.test.XXXXXXXXUITests-Runner). The profile path was missing. The environment variables were valid.
Run Code Online (Sandbox Code Playgroud)
有谁知道可能导致这个或如何解决它?
使用NSURLSession默认缓存,如何使特定URL的缓存无效?
我注意到NSURLCache的removeCachedResponseForRequest:方法,但这需要一个NSURLRequest对象,我没有原始请求.我是否需要在创建它们时存储它们,以便我可以将它们传回,removeCachedResponseForRequest:或者我可以创建一个具有相应URL的新URL,即使它没有相同的标题也将用作相应的URL.字段和其他属性作为原始?
鉴于此代码:
public protocol Selectable {
typealias T
var selected: Bool { get }
static var defaultValue: T { get }
}
public func selected<T: Selectable>(items: [T]) -> T {
if let selected = items.filter({$0.selected}).first {
return selected
}
return T.defaultValue
}
Run Code Online (Sandbox Code Playgroud)
我在返回行上出错:"无法将'TT'类型的返回表达式转换为预期的返回类型'T'".
改变它return T.defaultValue as! T似乎工作,但这对我没有任何意义.我错过了什么或者我应该提交雷达吗?
我试图依靠OHHTTPStubs作为一个框架,来自Xcode 7中的Swift UI测试目标.
我构建了.framework(通过Carthage,但我不确定它是否相关?)并将其拖入UI测试目标的Build Phases选项卡下的"带库的链接二进制文件"部分.
但是当我尝试@import OHHTTPStubs在我的.swift测试用例中时,Xcode告诉我No such module 'OHHTTPStubs'.
我有一个技巧来帮助测试UIAlertController在Swift 2.x中工作:
extension UIAlertController {
typealias AlertHandler = @convention(block) (UIAlertAction) -> Void
func tapButtonAtIndex(index: Int) {
let block = actions[index].valueForKey("handler")
let handler = unsafeBitCast(block, AlertHandler.self)
handler(actions[index])
}
}
Run Code Online (Sandbox Code Playgroud)
这在Swift 3.x下失败了fatal error: can't unsafeBitCast between types of different sizes,这诱使我相信可能有一种方法可以让演员工作.任何人都可以搞清楚吗?
在 Java 中,new BigDecimal("1.0") != new BigDecimal("1.00")即规模很重要。
然而,这显然不适用于 Hibernate/SQL Server。如果我将 BigDecimal 上的比例设置为特定值,通过 Hibernate 将 BigDecimal 保存到数据库,然后重新膨胀我的对象,我会返回一个具有不同比例的 BigDecimal。
例如,值 1.00 返回为 1.000000,我假设是因为我们将 BigDecimals 映射到定义为的列 NUMERIC(19,6)。我不能只将列定义为所需的比例,因为我需要将美元和日元值(例如)存储在同一列中。我们需要在数据库中将 BigDecimal 表示为数字类型,以便外部报告工具使用。
是否存在“正确”映射 BigDecimal 的 Hibernate UserType,还是我必须自己编写?
假设我正在为tableView:cellForRowAtIndexPath:视图控制器上的委托方法编写单元测试。根据我传入的索引路径,此方法可以返回几个不同的单元配置。
我可以轻松地断言该cell.textLabel.text属性。但是,如何断言该cell.imageView.image属性包含正确的图像?图像或imageView都不具有(公共API)属性,我可以使用这些属性来查找图像名称或文件名。
我想出的最好办法是创建最小的有效.png(使用它,[UIImage imageWithData:]以便在单元测试中不要碰到磁盘),并断言从中获得的字节数组cell.imageView.image是我期望的字节数组。我创建了一个OCHamcrest匹配器,以使其变得更好一点,但这是一种不令人满意且不灵活的方法。
有谁有更好的主意?
到目前为止,我已经看到它做了三种方式:
1:
- (instancetype)init
{
self = [super init];
if (self) {
// ...
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
2:
- (instancetype)init
{
if (self = [super init]) {
// ...
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
3:
- (instancetype)init
{
if ((self = [super init]) == nil)
return nil;
// ...
return self;
}
Run Code Online (Sandbox Code Playgroud)
哪种形式更具惯用性Objective-C?
我想为我的结构创建一个 init 方法,其中包含一堆用于单元测试的默认值。我不希望主模块能够看到这个 init 方法。
我以为我可以简单地在我的测试类文件中创建结构的扩展,但这不起作用:
Foo.swift(在应用程序目标中):
public struct Foo {
public let bar: Int
public init(colour: String) {
self.bar = colour == "Green" ? 0 : 1
}
}
Run Code Online (Sandbox Code Playgroud)
FooExtension.swift(在测试目标中):
extension Foo {
public init(bar: Int = 42) {
self.bar = bar
}
}
Run Code Online (Sandbox Code Playgroud)
请注意主文件中的非默认初始化程序,因此 Swift 编译器不会自动为我创建成员初始化程序。也许这与问题有关,也许不是。
Swift 编译器抱怨Cannot assign to 'bar' in 'self'。但是当我将该 init 方法复制到Foo我的主要目标中结构的原始定义中时,它工作正常。无论是否使用默认参数值,我都会得到相同的结果。
这是一个 Swift 编译器错误还是与在一个模块中为另一个定义的结构定义扩展有关?当我尝试在 Playground 中复制它时,一切正常。
我使用 Swift 1.2 和 Xcode 版本 6.4 (6E35b)
ios ×4
swift ×3
objective-c ×2
xcode7 ×2
bigdecimal ×1
caching ×1
carthage ×1
casting ×1
generics ×1
hibernate ×1
idiomatic ×1
java ×1
nsurlcache ×1
nsurlsession ×1
ocmockito ×1
sql-server ×1
swift3 ×1
unit-testing ×1
xcode ×1
xcuitest ×1