Нужно ли Mockito использовать отражение, если я сделаю значения Mock закрытыми? - PullRequest
0 голосов
/ 31 декабря 2018

Допустим, у меня есть тестовый класс с некоторыми насмешками.Линт предполагает, что поля могут быть приватными.Мне интересно, есть ли проблема в том, чтобы сделать их частными?Один из моих коллег считает, что, возможно, это заставит Мокито использовать рефлексию.Это правда, или я могу безопасно пометить их как частные?

@Mock private Context context;

против

@Mock Context context;

Официальная документация Android имеет закрытое значение для версии Kotlin, но не для версии Java (навремя написания этого вопроса).https://developer.android.com/training/testing/unit-testing/local-unit-tests#kotlin

Я посмотрел вокруг и гуглил, но я не уверен, поскольку нигде не упоминается явно, где я могу найти, и некоторые ссылки имеют частные, а другие нет.

В обоих случаях тесты выполняются нормально и занимают примерно одинаковое время (10 секунд).По этой причине я думаю, что лучше пометить как закрытый и удалить ошибку lint.Что может быть недостатком?

Насколько я могу судить, рефлексия не имеет ничего общего с частным значением или нет.Кажется, это больше о том, может ли он видеть методы внутри класса mock.Если эти методы внутри класса являются закрытыми, тогда ему нужно будет использовать отражение.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

«Ограничение» на отражение в Android распространяется только на код, который выполняется на устройстве в вашем приложении.Модульные тесты не должны придерживаться этого принципа, так как они запускаются на компьютере и не отображаются в вашем приложении.

Я всегда использую частные свойства в своих тестовых классах и никогда не сталкиваюсь с какими-либо проблемами.

Обновление: после просмотра исходного кода кажется, что Mockito использует отражение для создания экземпляров свойств @mock, независимо от того, являются ли они частными или открытыми.

0 голосов
/ 31 декабря 2018

Вы можете сделать поля приватными, если хотите, рефлексия также может использовать приватные поля.

Я бы лично подумал о лучших практиках и, если необходимо, использовал бы переменные как приватные с методами получения и установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...