SAX 파싱을 수행하고 객체를 생성하는 클래스를 단위 테스트하려고합니다. 이 클래스는 문자열을 인터넷에서 문서의 URL을 나타내는 매개 변수로 사용하여 구문 분석 한 다음 내용을 기반으로 개체를 만듭니다.단위 테스트를 할 수 있도록 내 수업을 리팩토링하는 방법은 무엇입니까?
단위 테스트를 실제로 네트워크에 액세스하고 싶지 않으므로 구문 분석 할 몇 가지 테스트 XML 파일을 갖고 싶습니다. 그러나 내 AndroidTestCases에서 액세스하는 방법을 알아낼 수 없습니다. 실제 응용 프로그램에 테스트 파일을 포함하고 싶지는 않지만 테스트 프로젝트에 필요합니다. (별개의 프로젝트입니다. 사용자 정의 AndroidManifest가 있어야하므로 수집 할 수있는 Android 테스트의 표준입니다. .xml, 하나).
한 가지 방법은 XML 파일을 테스트 프로젝트의 assets 디렉토리에 넣고 테스트 케이스의 InputStream
에 getContext().getAssets().open(filename
을 사용하여 읽을 수 있지만 내 클래스에는 URL 문자열이 필요합니다. 차라리 현재 URL 문자열 대신이 클래스에 InputStream을 제공하지 않아도됩니다. 나는 파싱을 테스트 할 수 있습니다. 하나는 문자열을 취하고 다른 하나는 Inputstream을 테스트하고 두 번째는 테스트하는 방법입니다.하지만 어떻게 문자열을 취하는 지 테스트 할 수 있습니까?
이 문제를 피하기 위해 클래스 및 테스트를 어떻게 디자인해야합니까?
이러한 접근 방식과 클래스가 문자열 대신 InputStream을 허용하도록 만드는 차이점은 무엇입니까? 단지 간접비를 추가하는 수준이 아닌가? – JRL
예. 이러한 추상화 수준은 기본 메소드에 영향을주지 않고 기본 코드를 변경할 수 있음을 의미합니다. 그런 다음 정상적인 경우에 메소드에 InputStream을 전달할 필요가 없습니다. 정상적으로 작업을 수행하는 데 필요한 것이 아니기 때문입니다. – Tejs