Частный член недоступен? - PullRequest
       20

Частный член недоступен?

0 голосов
/ 25 февраля 2012

Так что у меня есть класс Java, с 3 закрытыми полями

public class Parcel {
    private String guid;
    private List<String> files;
    private String zipFileName;

    public Parcel (List<String> files, String zipFilePath){
        UUID uuid = UUID.randomUUID();
        guid = uuid.toString();

        zipFileName = zipFilePath + File.separator + guid + File.separator + ".zip";

        if ((files != null) && (!files.isEmpty())){
            this.files = files;
        }
    }
}

Теперь я пишу тест JUnit для проверки этих приватных полей

public class ParcelTest {

    @Test
    public void parcelObject() {
        String zipFilePath = "/path/to/folder";
        List<String> files = new ArrayList<String>();

        files.add("/path/to/folder/test1");
        files.add("/path/to/folder/test2");

        Parcel parcel = new Parcel(files, zipFilePath);

        Class<? extends Parcel> parcelClass = parcel.getClass();

        try {
                        Field guid = parcelClass.getDeclaredField("guid");
        guid.setAccessible(true);
        System.out.println(guid.get(parcel));
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

Я получаю сообщение об ошибке при попытке получить доступ к частному guid полю. Я пробовал это даже после создания конструктора с нулевым аргументом. как мне получить доступ к приватным пользователям здесь?

EDIT Я понял это, и я обновил свой ответ, если кому-то еще это нужно.

P.S: Как я могу закрыть этот вопрос>

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

Вам гораздо лучше тестировать внешне видимое поведение (поведение, а не методы получения и установки).Если ваш код не меняет поведение, вы должны удалить его.

(Также вы можете скопировать свой список перед сохранением его в поле (и перед проверкой действительности).)

0 голосов
/ 25 февраля 2012

Почему у вас нет публичного добытчика или сеттера вместо того, чтобы заниматься отражением?

...