문제

최근 나는 일부를 변경 코드에 오래된 시스템의 모든 코드가 단위 테스트를 확인할 수 있습니다
하기 전에 변경을 쓰고 싶은 테스트,하지만 각 클래스를 만들의 많은 종속성과 다른 항 패턴이 만든 테스트는 매우 어렵습니다.
분명히,나는 원하는 형식의 코드를 간편하게 테스트를 작성 테스트를 변경할 수 있습니다.
이 방법을까요?또는 당신은 많은 시간을 보내고 쓰기가 어려운 테스트를 작성하는 것이 대부분을 제거 후이터베이 완료됩니다?

도움이 되었습니까?

해결책

첫째, 여기와 훌륭한 문서 끝에 단위 테스트.둘째,내가 찾는 좋은 방법을 피하기 위해 톤에 있는 변화의 오래된 코드를 리팩터링것을 조금까지 테스트할 수 있습니다.중 하나 이렇게 할 수 있는 쉬운 방법을 개인 회원 보호,그리고 다음 재정의 보호된 필드입니다.

예를 들어,말하자가 있는 클래스에 어떤 재료에서 데이터베이스 생성자입니다.이 경우에,당신은 할 수 없습을 재정의 보호는 방법이지만,추출할 수 있습니다 DB 논리를 보호된 필드를 재정의 테스트에서.

public class MyClass {
    public MyClass() {
        // undesirable DB logic
    }
}

public class MyClass {
    public MyClass() {
        loadFromDB();
    }

    protected void loadFromDB() {
        // undesirable DB logic
    }
}

그리고 당신의 테스트는 다음과 같습니다:

public class MyClassTest {
    public void testSomething() {
        MyClass myClass = new MyClassWrapper();
        // test it
    }

    private static class MyClassWrapper extends MyClass {
        @Override
        protected void loadFromDB() {
            // some mock logic
        }
    }
}

이것은 약간의 나를 들어,사용할 수 있기 때문에 DBUnit 이 경우에는,그러나 실제로 나는 이와 비슷한 경우는 최근에 원하기 때문에 나는 일부를 테스트 기능을 완전히 관련 데이터에 로드되도록,그래서 그것은 매우 효과적입니다.나 또한 발견은 노출의 구성원에 유용한 다른 비슷한 경우에는 내가 필요로 제거하는 일부 종속성되어있는 클래스에서는 오랜 시간입니다.

내가 추천하는 것에 대하여 이 솔루션을 작성하는 경우 프레임워크만하지 않는 한,당신은 정말이지 노출원의 사용자에게 당신의 프레임 워크입니다.

그것의 비트는 해킹,를 찾지 못해요 그것은 매우 유용합니다.

다른 팁

@valters

에 동의하지 않는 귀하의 성명을 테스트하는 휴식 안 버튼을 눌러 설치할 수 있습니다.테스트해야 하는 표시하지 않는 응용 프로그램 새로운 버그를 도입하는 기능입 테스트(및 버그를 발견하는 표시의 누락 테스트).

는 경우 테스트를 중단하지 않을 구축,당신은 쉽게 실행할 수 있습 상황을 새 코드를 나누기를 구축하고 그에 대한 알려져 있지 않은 잠시만 기 테스트됩니다.실패 테스트를 해야에 빨간색 플래그는 하나의 테스트 또는 코드가 될 수 있습니다.

또한할 수 있도록,테스트하는 것이다 빌드가 실패를 일으키는 평가를 천천히 크리프 지점으로,당신은 더 이상 신뢰할 수 있는 설정의 회귀 테스트합니다.

는 경우 문제가 있으로 테스트를 깨고 너무 기능을 확장시킬 수 있습니다 표시하는 테스트에 기록되고 있습니다 너무 깨지기 쉬운 방식으로(에 대한 의존도는 리소스를 변경할 수 있습과 같은 데이터베이스를 사용하지 않고 DB 단위로,또는 외부 웹사 서비스해야 하는 조롱),또는 그 것을 표시 할 수있다 거기에는 개발자가 팀에 제공하지 않는 테스트는 적절한 관심입니다.

굳게 믿고 실패 테스트를 수정되어야 가능한 빨리 그냥 당신이 해결할 것이라는 코드가 실패를 컴파일하다.

나는 확실하지 않은 왜 그런 말을 하는 단위 테스트 가 제거되면 refactoring 이 완료됩니다.실제로 당신의 장치-테스트해야한 후 실행하는 주요 구축(을 만들 수 있는 별도의"시험"를 구축,그냥 단위 테스트를 실행한 후 주요 제품은 내장).당신이 즉시 확인이 변경된 경우에 한 조각에서 휴식에서 테스트를 다른 하위 시스템에 있습니다.참고 그것의 비트를 다른 테스트를 실행하는 동안 구축(일부를 옹호할 수 있습)-일부 제한 테스트 유용하는 동안 구축하지만,일반적으로 그것의 생산성은 단지 구축하기 때문에 일부 단위의 테스트는 일에 실패합니다.

를 작성하는 경우 자바(기회),체크 아웃 http://www.easymock.org/ -유용할 수 있습을 줄이기 위한 결합에 대한 테스트가 목적이다.

I have read 작업을 효과적으로는 레거시 코드와 동의해요 그것은 매우 유용한 처리에 대한"쓸만한"코드입니다.

몇 가지 기술을 적용하는 컴파일한 언어(에서 일하고 있어요""오래된 PHP 앱),하지만 대부분의 예약이 적용 가능한 언어.

Refactoring 책 때로는 가정 코드에서는 반 이상적인 또는"유지 관리 인식"상태 전 refactoring 지만,시스템 제가 작업하는 이상적이지고 개발되었으로"당신은"애플 리케이션,또는 첫 번째 응용 프로그램을 위한 몇 가지 기술을 사용한(그리고 비난하지 않은 초기에 대한 개발자는,이후 나는 그들 중 하나예요),그래서 거기에 아무 테스트는 모두에서,그리고 코드입니다 때로는 지저분하다.이 책의 주소는 이런 상황이는 반면,다른 리팩터링은 일반적으로 책지 않아(아이)정도입니다.

내가 언급을 받지 못한 모든 돈을 편집기에서도의 저자는 이 책;)지만,나는 그것을 발견 매우 흥미로운 이후,리소스가 부족한 분야에서의 레거시 코드(특히 제어,프랑스어,그러나 그것은 또 다른 이야기입니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top