
static 메서드가 Mocking이 불가능한 이유?
·
클린 코드
static 메서드는 클래스 레벨에서 실행되기 때문에 , 객체 인스턴스와 무관하게 동작한다.대부분의 Mocking 프레임워크는 객체의 메서드를 가짜로 대체하는 방식으로 동작하게 된다. 예를 들어 Mockito 같은 프레임워크에서는 객체 인스턴스를 가짜(Mock)으로 만들고, 해당 객체의 메서드만 오버라이드해서 동작을 변경할 수 있다.JVM에서 static 메서드는 클래스 로드 시점에 결정된다. 이미 메모리에 로드된 것이다. 근데 런타임 실행 중에 객체 기반의 Proxy(Mock)로 변경할 수 없다. 이를 PowerMock을 사용해 강제로 static 메서드도 Mocking 할 수 있게 만드는 것은 좋은 대안이 아니다.설계가 잘못되었다는 신호로 받아들여야 되는 것이다. 근데 이마저 final 클래스면 ..