Behavior-Driven Development

Behavior-Driven Development (BDD) is sort of similar to TDD, but you can focus on testing the behavior of your app instead. The main difference is the way the tests are written. Using XCTest, you mainly use the method name to describe what the test does. BDD frameworks usually allow you to write the expected behavior as a text string, and therefore, make the tests easier to read.

It is often said that the tests become so clear that people who are not familiar with programming can write them. Here is an example that uses the Quick framework and its matcher framework, Nimble:

class ToDoItemSpec: QuickSpec { 
  override func spec() { 
    describe("to-do item") {
 
             
      it("can be created with a title") { 
        let item = ToDoItem(title: "Test title") 
        expect(item).toNot(beNil()) 
      }
 
             
      it("can be created with a title and a description") { 
        let item = ToDoItem(title: "Test title", 
                            itemDescription: "Test description") 
        expect(item).toNot(beNil()) 
      } 
    } 
  } 
} 

These two tests are equivalent to the one that we wrote in Chapter 3, A Test-Driven Data Model:

func testInit_ShouldTakeTitle() { 
  let item = ToDoItem(title: "Test title") 
  XCTAssertNotNil(item)
}
 
 
func testInit_ShouldTakeTitleAndDescription() { 
  let item = ToDoItem(title: "Test title", 
                      itemDescription: "Test description") 
  XCTAssertNotNil(item) 
} 

Quick can do a lot more to make your tests easier to read. Search for Quick on GitHub and see yourself. Even if you don't want to use BDD, the Quick documentation has a lot of general and valuable information about testing.