Unit testing is a method to test individual units of source code to determine if they are fit for use. A unit is the smallest testable part of an application. Unit tests are created by programmers during development. Test-driven development uses tests to drive the design by writing a failing test first, then code to pass the test, and refactoring the code. Unit tests should be isolated, repeatable, fast, self-documenting, and use techniques like dependency injection and mocking dependencies. Benefits of unit testing include instant feedback, promoting modularity, acting as a safety net for changes, and providing documentation.
Overview of unit testing, introduction by Ikhwan Hayat, a freelance software developer with 9 years experience.
Comparison of manual vs automated testing, definitions of unit testing, and introduction to Test Driven Development (TDD) as a design approach.
Overview of the TDD cycle (RED-GREEN-REFACTOR) and demo requirements for unit testing a bank account application.
List of IDEs, unit testing frameworks, and mock frameworks along with a testing strategy: Arrange, Act, Assert.
Key characteristics of effective unit tests including isolation, repeatability, speed, and self-documentation, plus concepts like Dependency Injection.
Discussion on 'mocking' and types of test doubles: Dummy, Fake, Stub, and Mock to aid unit testing.
Advantages of unit testing including instant feedback, modular design, safety nets, and documentation.
Recap of unit testing importance, TDD, and future learning areas like BDD and CI in testing.
Unit? 4
Unit testingis a method by which individual units of
source code are tested to determine if they are fit for
use.
One can view a unit as the smallest testable part
of an application.
Unit tests are created by programmers or
occasionally by white box testers during the
development process.
5.
TDD
Test DrivenDesign
It’s NOT testing, but using tests to DRIVE the
design
As a side-effect, you got unit tests!
With good level of coverage!
5
6.
6
RED
GREEN
REFACTOR
Write a failingtest. With empty class/method.
Fill in the class/method implementation. Make the tests pass.
Make code better.
7.
Demo: Bank Account
Requirements
Can create bank accounts
Can deposit money into account
Can withdraw money from account
Throw exception if balance is insufficient
Can transfer money from one account to another
Can insert and update accounts into database
7
A good unittest is…
Isolated/independent
Test one thing at a time.
Unit under test doesn’t depend on the other to make test runs.
Repeatable
Running multiple times yields the same result.
Doesn’t rely on environment.
Fast
You want to repeat it again and again.
You want it to be a pleasure to work with.
Self-Documenting
Test code and code under test clear and concise.
Can be a reference for usage of your class/method/etc.
18
Types of TestDoubles
Dummy objects are passed around but never actually
used. Usually they are just used to fill parameter lists.
Fake objects actually have working
implementations, but usually take some shortcut which
makes them not suitable for production.
Stub objects provide canned answers to calls made
during the test, usually not responding at all to anything
outside what's programmed in for the test.
Mock objects are pre-programmed with expectations
which form a specification of the calls they are
expected to receive.
22
Benefits
Instant feedback
Write test, write code, see instant result.
Promote modularity in your design
DI, SRP, Interface vs Implementation.
Safety net
Change/add code and check if business rules are still
honored.
Free documentation
Can be a reference for usage of your
class/method/etc.
24
25.
Done!
What isunit testing.
TDD.
How to write good unit tests.
How unit testing can benefit us.
25
We have learned…
Get the codes and slides at…
https://github.com/ikhwanhayat/jomweb_unittest
26.
Next?
Learning BDD(Behavior Driven Design).
Research CI (Continuous Integration).
Learn on how to design testable systems.
Use unit testing for your project!
(I mean, seriously, USE IT!)
26
You can go on with…
27.
MOAR!
Google+ MyDev
http://www.mydev.my/automated-testing-
dalam-pembangunan-perisian.html
ikhwanhayat@gmail.com
27
THANK YOU FOR LISTENING!
Editor's Notes
#5 In procedural -> module/function, In OOP -> class/method. Jenis test paling mendalam. What you actually test is behavior.