Source: Software Testing course at ITMO university by Kochubeev Nikolay Sergeevich
Unit tests check individual units of software (be it functions, methods or classes) in isolation from the rest of the system. The goal is to ensure that every module works as intended. They're usually placed in a separate from the source code directory.
Test doubles are used to ensure Unit tests are truly isolated.
Factories, builders and random-based tests are used to generate test data.
Property-based testing is an approach to testing in which we test the properties of a function rather than individual examples.
Data-driven testing is an approach in which one test function is executed multiple times with different sets of input data.
Fixture is a defined and reliable context for the tests.
Pros:
Cons: