출처:
https://martinfowler.com/bliki/UnitTest.html
https://ryuks.tistory.com/m/17
Martinfowler의 글을 가장 잘 설명한 것 같은 블로그 글을 기반으로 작성하였습니다.
단위 테스트란?
응용 프로그램에서 테스트 가능한 작은, 하나의 기능 또는 메소드가 예상대로 동작하는지 확인하는 테스트
단위 테스트는 보통 메서드, 클래스 단위로 정해지는데, 단위의 크기가 작을수록 복잡성이 낮아집니다. 단위에 대한 정의는 하는 사람에 따라 다르지만 결국 검증하려는 시스템에서 작은 부분에 맞추어지고, 다른 종류의 테스트 보다 가볍고 빠르고 화이트박스 테스트의 성격을 가지고 있습니다.
Marticle Fowler의 글을 보면 단위테스트는 두가지 종류로 나뉘어집니다.
Sociable and Solitary

Sociable 테스트는 어떤 기능(A)을 테스트 하기 위해서 추가적으로 필요한 객체들(B,C)이 존재한다면, 그 객체들(B,C)을 실제 객체로 필요로 하고 사용한다면 이를 Sociable 이라고 표현합니다.
관계를 맺고 있는 협력 객체가 있는 경우, 이 객체들을 가짜로 사용하지 않고 실제 객체로 테스트 하는 것입니다.
이는 Sociable이 어떤 것을 목표로 하고있는지를 이해해야 합니다.
Sociable 테스트는 여러 객체가 성공적으로 함께 동작하는지에 초점이 맞추어져 있습니다. A기능은 B,C 객체 변경에 영향을 받고, 이는 곳 실제 객체들이 유기적으로 잘 동작하는지를 보게 됩니다.
Solitary 테스트는 Sociable과 마찬가지로 기능(A)을 테스트 하지만, 추가적으로 필요한 객체들(B,C)을 가짜 객체로 만들어 사용합니다.
객체 B와 C 가 테스트를 목표로 동작하는 가짜 객체로 대체되면서, 테스트 A에 집중되었습니다.
이게 고립의 목적입니다. 다른 종속성이 단일 단위 테스트를 목표로 작동하게 가정하여 단일 단위 테스트에 집중되도록 한 것입니다.
끝으로
단위테스트에 대해 찾아보기 전까지는 당연히 Sociable 방식으로만 작성을 해야하지 않을까 라고 생각하고 테스트 코드를 작성했다.
그러다 보니 실제로 테스트하려는 A기능에 문제가 아닌 B객체에 문제로 A기능을 제대로 테스트 하지 못하는 경우가 발생하는 경우가 있었다.
그럴때마다 오히려 시간을 더 허비하는 느낌이 들었기에 단위테스트에 대해 찾아보았고 앞으로는 두 가지 방식을 때에 따라 알맞게 사용하면 될 것 같다고 생각이 들었다.