Skip to content
UdemySoftware TestingPaid courseIntermediate levelCertificate

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

icon
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

icon
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)!

icon
Udemy Discount

The discount is applied through our link. Open the course from here and Udemy's current promotional price is applied at checkout on most courses, no code to type.

Some courses are excluded from Udemy's promotions. If the price does not drop, clear your browser cookies and use the button again.

icon
Instructor Details

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. 

icon
More courses by Mark VanderVoord

$64.99

icon
More Software Testing courses

$59.99

$84.99

$10.99

$10.99

$13.99

$149.99

icon
Reviews

4.1

146 ratings on Udemy

Select a bar to show only those reviews.Select the bar again to show every rating.

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.

Showing all 10 reviews on CourseDuck

Read all 146 reviews on Udemy

icon
Quality Score

No CourseDuck member has rated this course yet. Taken it? Give each part a thumbs up or down.

Content Quality
/
Video Quality
/
Qualified Instructor
/
Course Pace
/
Course Depth & Coverage
/

Overall Score : 82 / 100