S01E10: [TDD 🍅 9] Testing Table View Cells in Swift

S01E10: [TDD 🍅 9] Testing Table View Cells in Swift

In this episode, we continue the implementation of ResultsViewController by test-driving the configuration of the cells. As we showcased in episode 7, the behavior and the layout of a view are two separate things, which can be tested and implemented independently.

Read More

S01E09: [TDD 🍅 8] Establishing a Presentation Layer in Swift

S01E09: [TDD 🍅 8] Establishing a Presentation Layer in Swift

In this episode, we continue the development of the UI as we start implementing the ResultsViewController, a class responsible for showing the result of a finished game. Unlike the QuestionViewController, we reach a point where we need to deal with more complicated logic for displaying the right information on the screen...

Read More

S01E08: [TDD 🍅 7] Testing Table Views in Swift

S01E08: [TDD 🍅 7] Testing Table Views in Swift

In this episode, we finish the QuestionViewController implementation by test-driving the table view delegate behavior. We start by refactoring the delegate selection in the QuestionViewController tests, and we lay out the UI to match the prototype.

Read More

S01E07: [TDD 🍅 6] Powerful Refactorings in Swift

S01E07: [TDD 🍅 6] Powerful Refactorings in Swift

In this episode, we refactor the QuestionViewController class and its tests, and we introduce a way for notifying a delegate when the user selects an answer.

We start the test refactoring by making use of a factory method with default values, so, in the event of...

Read More

S01E06: [TDD 🍅 5] Testing View Controllers in Swift

S01E06: [TDD 🍅 5] Testing View Controllers in Swift

In this episode, we dive in the UI side by following the same principles and disciplines we did before. We create and test-drive the QuestionViewController, a class responsible for displaying a question and its options for answers.

Read More

S01E05: [TDD 🍅 4] Swift Mutation Testing and Refactoring

S01E05: [TDD 🍅 4] Swift Mutation Testing and Refactoring

In this episode, we finish the Game Flow by creating a solution for accumulating the questions and answers and a new method for routing to the result.

We use the mutation testing technique to check if the behavior of the Flow class is well covered by our tests...

Read More

S01E04: [TDD 🍅 3] Swift Closures and Recursion

S01E04: [TDD 🍅 3] Swift Closures and Recursion

We begin the third tomato by sanitizing our FlowTest class. We refactor the tests by removing duplicated code, we talk about different ways for organizing the test setup code and we showcase the factory method for the creation of the system under test. These changes will prove very valuable as the project grows.

Read More
3 Comments

S01E03: [TDD 🍅 2] Swift @escaping Closures and Retain Cycles

S01E03: [TDD 🍅 2] Swift @escaping Closures and Retain Cycles

In this episode we continue the development of the Flow as we start progressing to next questions. We accomplish this by providing a closure as the answer callback in the Router protocol.

We discuss about the meaning of placing the @escaping instruction in a protocol and we examine our options for dealing with retain cycles and memory management...

Read More

S01E02: [TDD 🍅 1] Creating a Swift Framework - The Game Engine

S01E02: [TDD 🍅 1] Creating a Swift Framework - The Game Engine

In this episode, we dive into our first lines of code. Before we begin building the project, we agree on a set of rules such as:

  • Follow the Pomodoro Technique for segmenting workload and time
  • Develop the system by writing tests first
  • Separate the responsibilities of the system in modules

We start by creating the QuizEngine project, a module responsible...

Read More
2 Comments

S01E01: Swift App Idea and Prototyping with Storyboards

S01E01: Swift App Idea and Prototyping with Storyboards

In the first episode of the series, we discuss the idea of building a Quiz app for iOS. 

We kick off the season by discussing some of the features of the app such as question and answer formats and possible multiplayer options...

Read More
Comment