Interaction Tests, Mocks & Refactoring in Embedded Software (Udemy.com)
Dr. Surly’s School for Mad Scientists: Advanced Test Driven Development for Embedded & System Software in C
Created by: Mark VanderVoord
Last updated December 2020
What you will learn
- Develop an entire embedded project in C using Test Driven Development
- Interaction-based testing with stubbing and mocking
- Wield the open source tools CMock and Ceedling like an expert
- Refactoring working code with testing support
- Strategies and techniques for Unit Testing tricky code
- Strategies for prioritizing and planning an embedded project
How it compares
Against the other 281 rated Udemy courses in Software Testing on CourseDuck:
- Rating4.1 out of 5higher than 7% of them
- Reviews146#235 of 282 by number of reviews
- Length7 hoursshorter than 50% of them
- Last updatedDecember 2020earlier than 82% of them
Course Description
Welcome (Back) to Dr. Surly’s School for Mad Scientists!
Unit Testing and Test Driven Development help smart, capable developers like you create robust, reliable, and maintainable software that lets you sleep soundly at night. In this course you will apply these concepts to embedded code and system software in C.
This material builds on the foundation of our first course, Unit Testing & Other Embedded Software Catalysts. If you’ve taken our first course or you’re already familiar with TDD and xUnit frameworks, this course is a great next step.
Dr. Surly’s School for Mad Scientists
When you’re trying to take over the world you learn two things quite quickly. First, you end up building lots of technology like death rays and such that requires high quality firmware. Second, minions, climate-altering satellites, and lairs are expensive. While Dr. Surly’s lab has become quite proficient at software design and testing, supplemental revenue to fund all manner of villainy is a necessary evil. It’s all part of the standard world domination business model, and you get to benefit.
In This Course You Will:
Learn interaction-based testing with stubbing and mocking in a real-world project.
Use new tools! CMock & Ceedling complement the C testing tool Unity.
Iteratively refactor already working code with the support of your test suite.
See techniques and patterns for unit testing tricky code.
Try strategies for prioritizing and planning an embedded project.
Encounter big idea philosophies for process, design, and testing.
Connect with a supportive community.
Learn by Doing—Build a Real-World Project from Start to Finish
The end result of this course is an actual, functional application that can run on real hardware. No simplistic exercises or toy examples. The hardware isn’t necessary for this course, but if you do have the hardware, it will serve as final proof that your code works. And, the final deliverable might just be handy for other projects too.
The project is the mechanism for learning in this course. We’ll grow the project from requirements using a structured, iterative process much as you would in a real project. We teach development, testing, design, and process skills as we build this project, showing where they are applicable in real life.
You will learn key concepts first from us demonstrating the skills by example, then through guided use, and finally as homework assignments that allow you to practice the skill on your own as you implement your project.
This Course Includes:
0x01 (1) Large project from requirements to finished product
0x19 (25) Code-centered lectures
0x0D (13) Code-exercises contributing to the main project
0x1F (31) Helpful resource-packed supplemental primers, guides, and how-to’s
0x195 (405) Minutes of thorough video lectures
Links, quizzes, helpful hints, and more
Have questions? Please write us at… tdd@throwtheswitch.org
Join us in our mission to take over the world (with quality embedded software)!
Instructor Details
- 4.1 Rating
146 Reviews
Mark VanderVoord
Hi. I'm Mark. I've been developing awesome things with embedded software for 20 years and I help other people do the same. I've worked on self-guided lawnmowers, automotive electronics, color measurement devices, bluetooth beacons, and much more. I'm one of the creators of the open source tools Unity and CMock, which help people test C code. I'm one of the founders of Throw The Switch, an online community dedicated to making embedded software better.
More courses by Mark VanderVoord
Unit Testing & Other Embedded Software Catalysts (2020)
4.5 (685 Reviews)
Provider: Udemy
Time: 2.9h
$64.99
More Software Testing courses
ZeroToHero TestNG Framework - From Basics to Advanced (2026)
4.9 (828 Reviews)
Provider: Udemy
Time: 6.2h
$59.99
Selenium WebDriver with Java- Basics to Advanced + Framework (2026)
4.9 (620 Reviews)
Provider: Udemy
Time: 35.5h
$84.99
Karate DSL: API Automation and Performance from Zero to Hero (2026)
4.8 (4,652 Reviews)
Provider: Udemy
Time: 7.2h
$10.99
API Testing in detail using Postman - Test Automation (2026)
4.8 (423 Reviews)
Provider: Udemy
Time: 7.8h
$10.99
Quick Introduction to Postman and API Testing for Beginners (2025)
4.7 (23,113 Reviews)
Provider: Udemy
Time: 3.2h
$13.99
Software Testing Masterclass (2026) - From Novice to Expert
4.7 (12,622 Reviews)
Provider: Udemy
Time: 9.9h
$149.99
Reviews
By Ester Olivella on 4/22/2026
The tools are rather outdated. The container image contains Ubuntu 18.04, which cannot be connected to VSCode. I had to upgrade it to Ubuntu 20.04. I think either redoing the chapter or adding some extra material explaining how to connect the container to VSCode, so that you don't have to map the folder to your computer (in my case, the container is running under wsl) would be convenient, plus upgrading the container's image. Also I think the training tries to focus on too many topics (TDD, design patterns, refactoring...) when maybe some people are just more interested in a particular subject (in my case, CMock) and not so interested in building the actual functionality (for example, the whole HAL and low level).
By Kevin Hoche on 8/3/2024
Best course on TDD. I really loved the separation in iterations and increasing complexity. The course material is still relevant and no hardware is needed. Do not expect to get your hand holded, this course handles advanced material for anybody with some TDD experience.
By Ahmed Mostafa on 4/30/2024
Bad teaching and illustration methods. Non-organized content. Messy course!
By Skylar Knowt on 12/12/2023
Great course, material is definitely still relevant. The instructors are great, and are extremely responsive and helpful, which I really appreciate. The only downside is that the NXP LPC1768 board, although not required, is discontinued. It would have been great to test it on an actual board.
By Max Köll on 1/23/2023
Well this is one of the best courses I've ever taken. It is like looking over the shoulder of an experienced engineer, and this is way more then I expected from this course. It also teaches you some SW development design practices. Ever heard of the saying: "Weeks of coding can save you hours of planning"? These guys also give you the knowledge of the hours of planning, which is very uncommon and very much appreciated. This course is demanding - so if you think that it is only a couple of hours of videos - this is not it. If you really want to learn this stuff it will take you much longer, but the instructors really try to grain it into you. You just need to do the work ;) Anyway - thank you for this brilliant course.
By Christian Söderbacka on 8/4/2022
Some very useful design patterns and practices for bare-metal applications were presented. Using a real-world project instead of individual toy examples is definitively a plus. However, the mbed NXP LPC1768 board used seems to have been discontinued. A video explaining the why, when and how of using simulators is sorely needed, as it was not until after finishing the course that I realized I had been using a cross-compiler and simulator the whole time. I had to dig through the throwtheswitch forum to get an idea of what the simulator was even doing. ----------- EDIT: After having completed a significantly more expensive course on another platform, and with my new-found appreciation for the architectural patterns taught in this course, I felt obligated to come back and bump up the rating to a full five stars. Please make a course about DevOps for embedded systems!
By Gene Soroka on 7/19/2022
As an embedded developer who spent years writing his own HAL drivers for micro-controllers but working in a small company where formal unit testing didn't exist, and now working for a big company in a bigger team where TDD and unit testing is heavily used, this course is an excellent tool to help me transition from things I am already familiar with to formal unit testing practices. Also these guys are very clear and easy to understand and excellent teachers, and the little bit of humor along the way makes it even more fun. Highly recommend this course!
By Jack Wright on 1/3/2021
This course goes in depth with more than just interaction testing and mocking. I appreciated learning not just the concepts but also how to use a practical build tool: Ceedling. The development environment is fantastic, using a Docker container is cross platform and easy to use. The design patterns taught and how to apply them was very helpful. Delivery is also fantastic. Mark and Mike are engaging, funny, and on point! There is plenty of work here to test your testing skills on. There might be 7 hours of lectures, but time in total would easily be >24 hours (writing code and tests, and a bit of on target debugging, which the course does not cover). I am looking forward to a third course, which hopefully will cover system and on target testing!
By Andries Holtrop on 10/30/2020
There were very nice examples and pattern and best practices explained and handled. The huge amount of code around it made it at a certain point too heavy to take in. I'm a programmer for about 30 years, I know how to setup architectures and how to program. I would have liked a shorter version (with less coding) only explaining how to fit TDD, CMOCK and Ceedling in a project instead of working out a complete project.
By Kevin Kramb on 8/24/2020
I was happy with the first course but when I tried to apply Ceedling in my own personal projects, it didn't take long to realize that I didn't know enough and there was still much to learn. This second course covers a lot of the missing pieces, mocks being the prime example. This second course is also very good. It's much longer and requires more effort, skill, and commitment from the student.
Quality Score
No CourseDuck member has rated this course yet. Taken it? Give each part a thumbs up or down.
Overall Score : 82 / 100







