2013-08-13 2 views
0

Android 애플리케이션 용 Java로 단위 테스트를 작성해야합니다. 현재 내가해야 할 일은 객체 그림을 만들어 일부 테스트에 사용하는 것입니다. 이 개체의 문제는 그것의 생성자 메서드 호출 가지고있다 :(Mockito와 함께) 객체 생성자에서 사용 된 함수를 모의하는 법?

public Picture(File imageFile) { 
    this.filename = imageFile.getName(); 
    this.imageDimension = getImageDimension(); 
    /.../ 
} 

방법 getImageDimension()를 다른 클래스를 참조 때문에 난 그냥 결과의 모의 분리 가능성에 대한 선호. 조롱을 위해, 나는 Mockito에게 생성자를 주어야한다. 그래서 나는 닭고기 달걀 문제를 좋아한다.

따라서 개체 생성자에서 사용되는 함수를 모의이트로 모의 할 기회가 있습니까? 그렇다면 원본 코드를 변경하지 않고이 상황을 어떻게 해결할 수 있습니까?

+0

Picture 클래스는 "다른 클래스"인스턴스를 어떻게 가져 옵니까? 그것들은 당신이 모의하려고하는 것들입니다. – bowmore

+0

@bowmore 개인 정적 생성자가있는 Android 프레임 워크 MainActivity 클래스를 호출합니다. 내가 아는 한 정상적인 TestCase 클래스에서 조롱하는 것은 까다 롭습니다. –

+0

인터페이스 뒤에 숨길 수 없으므로 인터페이스에 의존해서 조롱 할 수 없습니까? – bowmore

답변

1

일반적으로 개체의 일부가 아닌 전체 개체를 모의합니다. 그러나 그것이 최종적인 것이 아니라면, Picture의 서브 클래스를 생성하고 생성자를 오버라이드하고 거기서 커 스톰을 수행하십시오. 그렇게하면 원래 생성자를 호출하지 않고 인스턴스를 테스트 할 수 있습니다.

최종 테스트의 경우 단위 테스트가 상당히 어려워집니다. 이 특정 클래스를 실제로 단위 테스트하지 않는다면 그림 개체를 모방하거나 전혀 모방해야합니다.

현재로서는 생성자가 작업을 수행하도록 허용해서는 안되며, 결과적으로 & 모의 테스트가 어려운 코드가 생성됩니다. 논리에서 객체 초기화를 분리하는 것은 좋은 일입니다. 아마도 여기에 생성자 args로 파일 이름과 치수를 사용하는 추가 생성자가 필요할 것입니다.

+0

답장을 보내 주셔서 감사합니다. :) 나는 전체 객체를 (성공과 함께) 조롱 해 보았고 Mockito가 생성자의 메소드에 도착했을 때 충돌을 일으킬 것으로 잘못 예상했다는 것을 알게되었다. (어떻게 든 나는 더 이상 참조를 모의 할 수 없다고 생각했다.) 그래서 그 문제가 해결됩니다. 그러나 Picture 클래스는 final이므로 Mockito로 객체를 모의하거나 하위 클래스로 만들 수 없습니다. 나는 여분의 생성자를 추가하고 실제 객체를 만드는 것으로 갈 것입니다. 추신 - 테스트중인 코드가 내 제작이 아닙니다 ... –

관련 문제