roman G
У нас тоже, но тут я завязался в спор
roman G
Про время сборки большого проекта
Andrew
Ребят, небольшой опрос Сколько у вас собирается проект(коммерческий и большой) ?
Вопрос не корректен, так как с смотря на чём собирать. Один и тот же проект на разных машинах будет по разному.
Andrew
У меня, например, мой проект 40 секунд. А у моего qa - минут 15. Но у него ноут слабенький.
Artem
у меня проект собирается на новом ноуте 40-60 сек, на старом 6-12)
Artem
так что да
Artem
очень много факторов)
Konstantin
у меня проект собирается на новом ноуте 40-60 сек, на старом 6-12)
а как вы тогда работаете, т.е. пишешь пишешь пишешь код, а потом как дебажить с таким долгим интервалом?
Konstantin
минута это долго?
секунд 5-10 ок я думаю, но минута уже долго
Dyno
Такой вопрос: надо хранить много картинок в приложении, открывается обозреватель и вы выбираете картинку, она добавляется в приложение. как сохранять эти картинки? и куда? в бд или шаред?
Roman
Микола
Konstantin
это ты как градл настроил?
у меня не такой уж большой проект, но сейчас пробую новый с разбивкой по модулям, типа побыстрее должно быть
Roman
Это без инстант ран?
Konstantin
без
Roman
без
а что за машина?
Konstantin
а что за машина?
стационар, 16 гб, проц там чет 4 ядра по 3.3 или около того
Roman
Что я делаю не так?
Roman
тоже 16 гб
Roman
проект 20 модулей
roman G
Да я уверен, что у него не больше 7к строк
roman G
Поэтому так
Mike
Да я уверен, что у него не больше 7к строк
да лол, 70к строк собираются полторы минуты на i7
Roman
модули в проекте
Котлин, даггер?
Roman
даггер по любому тормозит билд, учитывая, что у нас вообще всё на нём
Anonymous
всем привет
Anonymous
Нужно создать андроид приложение с функционалом бандлера При запуске приложения скачивать и устанавливать ( или чтобы они были внутри) stunell и openvpn Затем скачивать и устанавливать конфигурационные файлы для этого софта Далее управлять состоянием этих программ Подскажите к кому обратиться :)
Vitaly
Как мне протестировать этот участок кода? public void onCreate(@NonNull String addressId, @NonNull String senderId){ this.addressId = addressId; messageBus.subscribe(this); // Add to message the base data: "sender" and "addressee" messageEditor.setAddressId(addressId); messageEditor.setSenderId(senderId); } В messageEditor приходит две строки, но как мне проверить, что они действительно туда пришли?
Vitaly
Извините за слишком нубские вопросы
Саша Батанова
Ребята, меня озадачил дизайнер) какая дефолтаная высота у дефолтного edittext для одной строки?)
Саша Батанова
оке) для дефолтного 12sp)
Anonymous
Дизайнер в пикселях хочет ответ получить?))
Глеб
Блин что вы спорите? откройте и посмотрите апп-компат стили - там всё прописано!
Konstantin
в зеплин чето такое тоже добавляли емнип
Artem
Artem
https://material.io/design/components/text-fields.html#spec
Vitaly
Там нужно как-то получить результат
Vitaly
Но у messageEditor нету геттеров
Alexander
Там нужно как-то получить результат
Можно например замокать messageEditor, внедрить его в класс, и проверить (Mockito.verify) этих методов
Alexander
Но для этого мне разве не надо будет его передать в Presenter?
Архитектура вообще не важна, нужно проверить конкретный метод и факт передачи полей в объект messageEditor. Для этого надо создать мок-объект, любым способом засунуть его в текущий класс, вызвать метод и сделать Mockito.verify(messageEditor).setAddressId(addressId);, и со вторым полем тоже
Vitaly
Блин, почему в Dagger 2 нельзя создавать моки?
Vitaly
Я бы прям там создал mock этого объекта, а потом проверил через Verify, иначе очень сложно грамотно засунуть этот объект в класс
Vitaly
Делать сеттер отдельно для тестов, передавать в конструкторе - всё это как костыли выглядит
Alexander
всем привет. кто-нибудь имел опыт написания рекордера на open sl es? Ну или работал хотя бы с low latency audio
Владислав
появился ещё вопрос по Paging library. Как правильно вытянуть данные для paging list из хранилища, если хранилище возвращает целиком list? через subList его обрабатывать ?
Himars
Делать сеттер отдельно для тестов, передавать в конструкторе - всё это как костыли выглядит
Вообще, если нужно потестить отдельный класс в юнит тестах, то в мокито есть аннотация @InjectMocks если что Вот пример @Mock RestService restService; @Mock MyPrinter myPrinter; @InjectMocks MainService mainService; взят от сюда
Himars
Это под даггер типо?
Это минуя даггер. То же самое что вы в конструктор передали бы моки :D
Himars
Дагер в юнит тестах не участвует же Да он там и не нужен
Roman
Пока что напрямую передаю в тесты без даггера
Vitaly
Дагер в юнит тестах не участвует же Да он там и не нужен
Серьёзно? А я тут пытаюсь запизнуть его затолкать, всеми способами втащить в эти модульные тесты
Himars
Даггер полезен когда нужно подменить например репозиторий в интеграционных тестах (на основе UI тестов)
Himars
но я могу быть не прав :D
Himars
Серьёзно? А я тут пытаюсь запизнуть его затолкать, всеми способами втащить в эти модульные тесты
Вам же выше написали как покрыть тестами ваш случай. Нет? Если нужно постестить Presenter, то мокаем view и все остальное с чем работает презентер и передаем в конструктор презентера при создании. После чего имитируем вызовы методов презентера от вью и смотрим что он дергает и с какими параметрами на моках То же самое делаете с другими класами которые нужно потестить: 1. Мокаем все зависимости класа который необходимо покрыть тестами 2. Настраиваем возвращаемые значения моков 3. Дергаем необходимые в конкретном случае методы тестируемого обьекта 4. Проверяем совершались ли ожидаемые вызовы методов у моков с ожидаемыми параметрами
Vitaly
Но у меня есть объекты, которые создаются в самом Presenter, которые используют контекст Application, вот они и мешаются
Himars
У меня в Presenter нет View, вообще наличие каких-либо view в presenter противоречит самой его сути
View - как интерфейс для работы с Activity/Fragment/View которые реализуют этот интерфейс
Himars
Но у меня есть объекты, которые создаются в самом Presenter, которые используют контекст Application, вот они и мешаются
Для того что-бы код был тестируемый необходимо кодить следуя неким правилам, например: Принципы инверсии управления 1. Модули верхних уровней не должны зависеть от модулей нижних уровней. Модули обоих уровней должны зависеть от абстракций. 2. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Недостатки дизайна, которые устраняются с применением Инверсии управления 1. Жесткость. Изменение одного модуля ведет к изменению других модулей. 2. Хрупкость. Изменения в одной части приводят к неконтролируемым ошибкам в других частях программы. 3. Неподвижность. Модуль сложно отделить от остальной части приложения для повторного использования и тестирования P.S. плюс не забывать по максимуму абстрагироваться от Android фреймворка
Alex
Кто нибудь может поделиться толковой реализацией роутинга экранов.
Alex
Спасибо. Глянул.
Konstantin
а ктонибудь за все эти годы написал что нибудь еще кроме гитфокса в опенсорсе? )
Konstantin
ну, уровня сложно примерно такого же
Konstantin
в архитектуре админ
Konstantin
вообще что ты там такого хочешь узнать, все же можно было поспрашивать в чятиках
Dmitry
Комрады, как сделать отображение времени сообщений как в Telegram и WhatsApp? Мой кореш-программист утверждает, что сделать отображение времени в сообщениях как в Telegram и WhatsApp невозможно без каких-то вычислений строк, мол, это большая проблема. Именно на телефоне нужно рассчитать длину строки на экране, померить текст и рассчитать, какие слова не влезают на часы. Потом внедрить алгоритм для переноса слов и т.д. Это действительно так? Или есть какие-то хаки как в HTML-верстке, типа dev-аналога отдельному div и padding: -10px ? Сейчас у нас время всегда отдельной строкой в области сообщений, что не экономит место на экране чата. Как хочу: