我有以下问题.我想在执行所有测试类之前执行一段代码.例如:我不希望我的游戏在执行期间使用SoundEngine单例,而是使用SilentSoundEngine.我想在一次测试中没有激活SilentSoundEngine.我所有的测试都是这样的:
class TestBasketExcercise : XCTestCase {
override func setUp() {
SilentSoundEngine.activate () // SoundEngine is a singleton
}
// The tests
}
Run Code Online (Sandbox Code Playgroud)
-Edit-大多数答案都针对为TestCase提供自定义超类.我正在寻找一种更通用,更清晰的方式来提供所有测试都需要执行的环境.是不是有一个"主要"功能/ Appdelegate喜欢功能的地方进行测试?
我想显示来自后端的数据所以让我们有一个示例json文件:
{
"fonts": [
{
"name": "Helvetica",
"styleIdentifier": "H0",
"size": 17
},
{
"name": "Helvetica",
"styleIdentifier": "H1",
"size": 14
},
{
"name": "Helvetica-Bold",
"styleIdentifier": "H0Bold",
"size": 17
},
{
"name": "HelveticaNeue-Light",
"styleIdentifier": "H0Light",
"size": 40
}
]
}
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个relationship
(很多 - 多个)ordered
选项.通过输入我看到它总是以相同的方式写入Core Data,但是当我尝试获取它时
configuratation.fonts
这里fonts
是NSOrderedSet
我得到了完全地随机顺序的项目.我想念某个规格?或者我应该以某种方式排序?
__编辑__
首先,当我从上面的json获取数据时,我有一个空字体关系的配置集.然后我获取它并将其插入到核心数据中:
NSMutableArray *returnArray = [NSMutableArray new];
for(NSDictionary *fontDictionary in jsonArray) {
Font *fontObj = [Font font:fontDictionary inContext:context];
[returnArray addObject:fontObj];
}
Run Code Online (Sandbox Code Playgroud)
并且在此数组中数据的顺序正确.然后在配置对象中我将其添加到NSOrderedSet
:
-(void)appendTracks:(NSArray<Font*>*)fontArray {
self.fonts = …
Run Code Online (Sandbox Code Playgroud) 我正在努力理解以下代码的行为:
let a: Any? = nil
let b: AnyObject? = a as AnyObject
if let c: AnyObject = b {
print(c)
print("That's not right, is it?")
} else {
print("I'd expect this to be printed")
}
Run Code Online (Sandbox Code Playgroud)
在操场上运行时,虽然a为nil,但执行第一个闭包并打印以下内容:
<null>
这不对,是吗?
问:这怎么可能,是预期的行为?
ios ×2
swift ×2
anyobject ×1
casting ×1
core-data ×1
objective-c ×1
optional ×1
xctest ×1
xctestcase ×1