
Explore how the test pyramid stacks unit, functional, end-to-end, and manual tests, and why higher levels cost more to execute and write.
Recap essential testing concepts, including the test pyramid, unit tests, readable naming, and the arrange-act-assert with given-when-then, plus isolation and mocking in TDD.
Write code using test driven development to build the task manager's application logic, exploring triangulation and fake it till you make it through a bold refactor.
Apply test-driven development by faking the validate function to pass tests, design the task validator api, and progress from red to green toward a real solution.
Explore TDD in action with AI through the red-green-refactor cycle, using failing tests, the obvious implementation, and triangulation to validate task transitions.
Demonstrate a tdd cycle from red to green to refactor, add a failing test for blocked tasks that cannot move to done, and align code with the open closed principle.
Apply a real world test driven development approach to build a task manager with a restful API, in-memory persistence, mocks, and functional tests guiding design.
Set up domain and api structure, define a user service interface with a create function, and implement a user data class (id, username, password) for the test compile.
Practice test-driven development by invoking the user service's create method with a username and password, handling exceptions with try-catch, returning proper status codes, logging failures, and validating that tests pass.
Follow the test driven development cycle to identify the next implementation point by running a failing functional test, then implement the task service and handle an unsupported operation exception.
Execute the happy-path for creating a new task by mocking the user repository, running the task service, and asserting a single save call with a valid task.
Execute the functional test, observe a failure, and implement update status in the task service by adding a validation package with a task transition validator.
Highlight classicist TDD weaknesses: reduced test readability, large tests with heavy setup and assertions that hinder documentation; note complex refactorings and treating the API as secondary, risking overengineering.
Demonstrate test-driven development with AI to implement the task service, writing failing tests, implementing get tasks by assignee, and handling repository methods with unsupported operations.
Test-Driven Development in Action with AI - Nikos Voulgaris.
Apply Test-Driven Development in real-world software, integrate AI tools into your workflow, and elevate your professional skills.
Does Test-Driven Development sound fun and promising, but feel limited to toy examples like Tic-Tac-Toe or FizzBuzz?
I've been there. It was frustrating to see such a powerful technique presented in ways that felt disconnected from the complexities of real-world software. That's why I created this course - to help software engineers confidently apply TDD in production codebases, and discover its full potential beyond the basics.
In this course, I share the hard-earned lessons from my own journey mastering TDD - distilled into a practical, structured, and accessible format. You'll learn how to build maintainable systems from the ground up, and how to integrate AI tools into your development workflow to move faster without sacrificing control or the benefits of TDD.
By the end of the course, my goal is for you to walk away with real-world, hands-on skills, a deeper understanding of TDD - and hopefully, to have enjoyed the ride.
What You'll Build
Throughout the course, we’ll build a task manager application that exposes a RESTful API. Users will be able to register, create tasks, update task statuses, and retrieve their tasks.
We’ll follow the principles of hexagonal architecture - not dogmatically, but by letting it emerge naturally through our TDD process. To keep things simple, we’ll use in-memory persistence.
Technologies used: Spring Boot, Kotlin, and Spock. No prior in-depth knowledge of these tools is required. The focus isn’t on specific technologies - it’s on mastering the methodology, mindset, and discipline of Test-Driven Development.
You’ll also learn how to thoughtfully integrate AI tools to support (not replace) your decision-making and enhance your TDD workflow.
Why Learn From Me?
I'm a software engineer with over 12 years of professional experience. I started exploring TDD around a decade ago, and have been using it extensively in production for the past 8 years. Along the way, I've helped dozens of engineers adopt TDD through in-person coaching, pair programming, and online workshops.
I know the pitfalls, the resistance, the confusion - and the "aha" moments that make it all click. I created this course to pass those insights on to you.