2013-03-10 3 views
0

JUnit에 대한 더 많은 경험과 Android에서의 사용법을 얻으려고합니다. 공식 Android 교육 Parsing XML data을 참조하십시오. 사용 된 메소드를 테스트하는 방법에 대한 예제를 제공 할 수 있는지 궁금합니다.Android JUnit 및 구문 분석 xml 데이터 - 테스트 대상

은 특히 당신이 클래스 StackOverflowXmlParser에 포함 된 방법과 방법의 loadXmlFromNetwork()와 downloadUrl() 클래스 NetworkActivity.java]을 테스트 할 방법

+2

예를, 그러나 때때로 당신은 구문 분석 형식 파일을 결정하는 사람이의 목적 아니다 post는 일반적인 시나리오에서 누군가의 JUnit (onAndroid) 학습을 향상시키는 것입니다. – eeadev

답변

2

내가 단위 테스트에 당신을 줄 수있는 최고의 조언은 첫째 정말를하다 시험 단위가 무엇인지 이해하십시오. 테스트, 특히 단위 테스트를 작성할 때 테스트 단위가 단일 클래스인지 확인합니다. 모든 것이 조롱 받았고, 수업에서 모든 공개 메소드가 그것이 약속 한 바를 따르는 지 확인했습니다.

즉, 묻는 방법은 EVIL UNTESTABLE CODE입니다. 이와 같은 코드가 Google 엔지니어로부터 왔음을 보는 것은 다소 충격적입니다. 내 생각에 짐작할만한 점은 프런트 엔드 웹 개발자 인 이유는 변수가 모두 메서드의 맨 위에 선언 되었기 때문이며 자바 스타일과 null 값을 갖고 있지 않은 모든 로컬 변수를 초기화하면 누구든지 예제 isn't very experienced with Java을 작성했음을 알 수 있습니다.

테스트 가능한 상태로 만드는 방법을 상당히 리팩터링해야합니다. 예를 들어 loadXmlFromNetwork은 거짓 인 API를 제공합니다. 그것은 네트워크에서 XML을 "로드"하지 않으며, 또한이 작업을 완료 한 후 List<Entry>으로 파싱합니다.이 항목의 데이터를 HTML 형식의 String으로 밀어 넣은 다음 다시 반환합니다.

이 메서드 만 사용하는 첫 번째 문제는 필요한 개체를 요구하는 대신 자체 내부에 개체를 만드는 것입니다. 논리를 테스트하기 위해 이러한 객체를 모의 할 수 없으므로 테스트에 문제가 발생합니다. 테스트에서는 네트워크 의존성을 만들 필요가 없으므로 HttpURLConnection을 조롱하고 코드를 실행하기 위해 행동을 조롱하고 싶을 것입니다. 정확한 방향을 가리 키도록

, 구글의 리드 테스트 전도사에서이 비디오를 시청 :

http://www.youtube.com/watch?v=wEhu57pih5w

+0

죄송합니다. 크리스토퍼, 그것은 Google 친구가되는 것이 아니라 내가 아는 것처럼 java의 로컬 변수를 초기화해야하며 귀하의 링크 (http://www.javapractices.com/topic/TopicAction.do?Id=14)를 참조하고 있습니다. java 필드 (초기화 필드는 중복). – eeadev

+0

try/catch 블록 외부에서 값을 사용하려고 시도하지 않는 한 로컬 변수는 사용 시점까지 선언/초기화하면 안됩니다. [here] (http://www.javapractices.com/topic/TopicAction.do?Id=126)를 참조하십시오. –