우리 팀은 추가 유지 관리 및 개발을위한 기존 시스템을 제공 받았습니다. 이것이 사실 "유산"일 뿐이므로 정말 적은 수의 테스트가 있으며 그 중 대부분은 쓰레기입니다. 이것은 웹 인터페이스가있는 응용 프로그램이므로 컨테이너 관리 구성 요소뿐만 아니라 원할 때 언제 어디서나 "새롭게"수정되는 일반 Java 클래스 (모든 프레임 워크 등에 연결되지 않음)가 있습니다.대형 시스템에서 기존 자료를 단계별로 복구하는 방법은 무엇입니까?
우리가이 시스템에서 작업 할 때마다 우리는 주어진 부분을 만질 때마다 그 모든 것을 더 작은 조각으로 분해하고 의존성을 발견하고 리팩터링하며, 의존성을 코드에서 끌어 오지 않고 푸시하려고합니다.
제 질문은 그러한 시스템을 사용하여 의존성을 없애고 더 많은 코드를 테스트 할 수있는 방법입니다. 언제 그만하고 어떻게 처리해야합니까?
내가 당신에게 예를 보여 드리죠 :
이public class BillingSettingsAction {
private TelSystemConfigurator configurator;
private OperatorIdDao dao;
public BillingSettingsAction(String zoneId) {
configurator = TelSystemConfiguratorFactory.instance().getConfigurator(zoneId);
dao = IdDaoFactory.getDao();
...
}
// methods using configurator and dao
}
이 생성자는 확실히 너무 많이한다.
public BillingSettingsAction(String zone, TelSystemConfigurator configurator, OperatorIdDao dao) {
this.configurator = configurator;
this.dao = dao;
this.zone = zone;
}
또는 전용 종속성 세터와 생성자 설정 영역을 제공 : 또한 내가 할 줄 것은으로 변경하는 것입니다 더 나아가 등 PowerMock와 함께 마술을하고 필요 리팩토링이를 테스트합니다.
내가보기에 문제는 내가 생성자에서 의존성을 제공한다면, 나는 여전히 그들을 어딘가에 제공 할 필요가 있다는 것이다. 그래서 문제를 한 단계 위로 움직이는 것입니다. 모든 종속성을 연결하기 위해 공장을 만들 수 있지만 앱의 다른 부분을 만지면 각기 다른 공장을 갖게됩니다. 분명히 모든 앱을 한 번에 리팩터링 할 수 없으며 예를 들어 거기에 봄.
(아마도 기본 구현이 제공된 상태에서) 세터를 드러내는 것은 비슷합니다. 또한 테스트 용 코드 만 추가하는 것과 같습니다.
내 질문에 어떻게 대처합니까? 한 번에 작업을 수행하지 않고도 객체 간의 종속성을보다 잘 읽고 더 쉽게 테스트 할 수 있습니까?
예. 그것이 우리가 어떤 경우에 시작한 것입니다. 괜찮아 보이는데, 다른 사람들도이 방법을 선택하게되어 기쁩니다. 여기에 귀하의 의견을 보내 주셔서 감사합니다. – grafthez