使用给定的When Then模式在Swift中进行测试

使用像Quick这样的spec测试框架很不错,它可以启用BDD样式。

  describe(““文档”目录”){ 
它(“拥有开始所需的一切”){
让节= Directory(“文档”).sections
Expect(section).to(contain(“包含快速示例和示例组的组织测试”))
Expect(section).to(contain(“快速安装”))
} context(“如果没有您要的东西,”){
它(“需要更新”){
让你=你(真棒:真)
期望{you.submittedAnIssue}。最终到达(beTruthy())
}
}
}

但是,如果您不想使用其他框架,并且希望尽可能地靠近Apple SDK,可以参考以下提示。

这是我非常喜欢“单元测试的艺术”的书。 如果您不介意下划线,则可以遵循UnitOfWork_StateUnderTest_ExpectedBehavior结构

  func testSum_NegativeNumberAs1stParam_ExceptionThrown() 
func testSum_NegativeNumberAs2ndParam_ExceptionThrown()
func testSum_simpleValues_Calculated()

这是来自BDD的,并且在Cucumber中实践了很多。 您可以在martinfowler.com/bliki/GivenWhenThen.html上了解更多信息。

首先,向XCTestCase添加更多扩展

 导入XCTestextension XCTestCase { 
给定的func(_说明:字符串,闭包:()引发->无效)引发{
尝试闭包()
} func when(_描述:字符串,闭包:()throws-> Void)throws {
尝试闭包()
} func then(_描述:字符串,闭包:()throws-> Void)throws {
尝试闭包()
}
}

然后,为了进行测试,只需遵循given when then

  func testRemoveObject()引发{ 
尝试给定(“设置为存储”){
尝试storage.setObject(testObject,forKey:key)
}试试when(“从存储中删除对象”){
尝试storage.removeObject(forKey:key)
}然后尝试(“内存中没有对象”){
让memoryObject =试试? 用户的storage.memoryCache.object(forKey:key)
XCTAssertNil(memoryObject)
}然后尝试(“磁盘上没有对象”){
让diskObject =试试? storage.diskCache.object(forKey:key)作为用户
XCTAssertNil(diskObject)
}
}

我发现这比评论更有趣。 都是代码和描述性的。 也可以进一步开发以抛出description文本。


原始故事https://github.com/onmyway133/blog/issues/73