2016-10-25 10 views
3

Android 앱에서 테스트를 구현 중이며 모델에 대한 단위 테스트를 수행하고 싶습니다. 문제는 모델이 Realm으로 작성되었거나 CSV 파일 (witch univocity csv parser)을 구문 분석하여 만들어 졌으므로 setter가 없다는 것입니다. 그럼 유효한 값을 가진 조롱 된 객체를 어떻게 만들 수 있습니까? 나는 다음과 같은 것을 가지고있다.설정 도구가없는 모의 모델 객체

public class Content { 

    private String title; 
    private String description; 

    ... 
} 

어떻게 제목과 설명 데이터로 조롱 된 Content 객체를 생성 할 수 있습니까? 사전에

주셔서 감사합니다 테스트 클래스에서 아래

+0

자바 리플렉션 –

+0

을 사용할 수 있습니다.이 경우 리플렉션을 사용하는 방법에 대한 예를 들려 줄 수 있습니까? – FVod

답변

1

사용 코드 :

Field field = Content.class.getDeclaredField("str"); 
    field.setAccessible(true); 
    field.set(yourObject, "some value"); 

yourObject 당신이 당신의 테스트 클래스에서 사용 Content의 인스턴스입니다.

하지만 모의 객체를 채우면 안됩니다. 모의 객체에 대한 메소드 결과를 정의해야합니다.

+0

매력처럼 작동합니다, 감사합니다 – FVod

+0

내가 당신을 도울 수있어서 기뻐요. –

0

경고 단어 : 반영에는 많은 단점이 있습니다. 예를 들어 필드의 간단한 이름 변경이 눈에 띄지 않게됩니다. 나중에 컴파일러 오류는 있지만 실패한 단위 테스트로 이어지지는 않습니다.

이 필드를 초기화하는 데 사용할 수있는 패키지 전용 또는 보호 된 생성자를 제공하는 다른 해결책을 제안합니다. 그렇다면 은 아니요은 리플렉션을 사용합니다. 동시에, 그 클래스의 당신의 "공개"인터페이스처럼, 중 변경되지 않습니다

public class Content { 

    // unit testing only 
    Content(String title, ...) { ... 

그러나 물론, 당신은 균형을해야 - 중 당신은 필요하지 않습니다 그 생성자를 추가 생산; 또는 그렇게 강력하지 않은 리플렉션 코드로 이동하십시오!