Are you a Java developer and want to become an expert in software testing? That's the course for you! In this course, you will learn how to stop doing manual testing and start to do automated software testing.
How many times did you write a bug? How many times did you change the software and didn't test it all? Testing software is an art. And surprisingly easy! During the videos, we will see many real world classes that need to be tested.
In a nutshell, you will see that writing a test is almost like writing all those "main methods" you have written during your first programming lessons. Then, you will see how to do it professionally. And by professional, I mean learn how to have a good testing code, how to simulate databases using mock objects, and even how to practice Test-Driven Development, which is about writing the test code prior to the production code (and yes, that are many advantagens when doing it!).
Good developers write good code. And good code is, among many other things, code that work. Let's learn how to test software and never have a bug again!
Why should we test software? In this chapter, you will see that is really easy to write a bug -- in fact, more easy than we wanted it to be. How to find them? Testing the software, of course.
Now, it is time for us to write our first automated testing. And you will see that is looks like the code you've written in your first programming class -- yes, it is that easy. I will introduce you to JUnit, ladies and gentlemen.
Now you know how to write an unit test. Now, it is time to cover all possible scenarios. Let's write all the tests we can!
I will open my heart in here. I will tell you a real story about how a bug caused me a lot of troubles. And I bet you have a similar story. Hope you get even more motivated to study software testing.
It is your time to code (and test)!
We do have a lot of testing code now. More test code than production code, in fact. It's time for us to learn how to make test code more readable and maintainable. Let's start by removing repeated code.
And what about this famous "one assert per test" rule? I will tell you why I disagree with it, and how to make our assertions better.
Giving names is one of the most important thing when writing a test. We will discuss about how to give a test a name. It's easier than you think.
Time to go to the next level. Let's start by testing a more complicated class with different conditions and private methods. How do we do it?
Uhhh, now we have a very complicated private method. Should we test it isolated from the public method? Should we not? Let's talk about it.
Creating scenarios is, for sure, the hardest part when writing the test. Let's learn that "test data builders" are. They will save our time when dealing with more complicated scenarios.
Can we start the test ... by the test? Let's learn about Test-Driven Development, and see why this is a very popular practice among developers.
Should I go faster? Should I go slower? Let's discuss about taking "baby steps" during your implementation. Do they help? Should I do it all the time?
Now, let's see how we can convince our managers that we are not losing time when we are writing automated tests. I will show you some very good arguments. After that, even your boss will tell you to write tests.
It is your time to practice.
Again, going to the next level. How can we test classes that depend upon another classes? What if I depend upon a DAO, that access my database? Easy... Let's simulate them using mock objects.
What if I use a crazy API in my code? I can't mock it. Hmm, yes, you can. All you have to do is to write a little bit more code. I will show you.
It's your time to practice.
PhD candidate in Computer Science, Maurício is passionate about software development. With 10 years of experience in writing software, Maurício is very focused on object-oriented software good practices (in which he just published a book about), and a Test Driven Development evangelist. His book about TDD and its effect on class design is very popular. He also participates in many industry and academic conferences about software engineering, such as ICSME, ICST, QCON, and Agile.