• Как выглядит реальный пример теста JUNIT?

    @Symbol7
    Как и сказал Сергей Горностаев , пользу от Unit-тестов можно увидеть только в серьёзном и большом проекте, а так же при автоматических сборках проекта. Задача Unit-тестов проверить, правильно ли выполняется логика тестируемого метода и возвращает ли он ожидаемый результат. Желательно, не выходить за пределы тестируемого класса, то есть, если класс использует какие-то внешние ресурсы или другие классы, то стоит съэмулировать (замокать) эти ресурсы и классы, так как они должны быть протестированы отдельными тестами. Таким образом мы тестируем только код конкретного класса, предварительно зная, что будут возвращать нам другие классы.

    Допустим, у нас есть какой-то маппер книги из сущности БД в объект DTO. В этот маппер инжектится репозиторий книг, из которого по id можно получить книгу.
    public class BookMapper {
        @Inject
        private BookRepository bookRepository;
    
        public BookDTO mapToDTO(Integer id){
            Book book = bookRepository.findOne(id);
            return new BookDTO(book.getId(), book.getName());
        }
    }


    Наша задача протестировать логику этого маппера. Мы можем замокать репозиторий, так как сейчас тестируем не его (на него должны быть отдельные тесты), и проверить, вернёт ли нам маппер нужное DTO, если ему передать какой-то id. Настраиваем мок репозитория и вызываем нужный метод. После чего сравниваем ожидаемый результат, с полученным результатом:

    @RunWith(MockitoJUnitRunner.class)
    public class BookMapperTest {
        @Mock
        private BookRepository bookRepository;
    
        @InjectMocks
        private BookMapper bookMapper;
    
        @Test
        public void testMapToDTO() {
            // Мокаем репозиторий. Он возвращает конкретную книгу при передаче ему
            // конкретный id
            Book book = new Book(20, "Конституция");
            Mockito.when(bookRepository.findOne(20)).thenReturn(book);
    
            // Ожидаемая книга
            BookDTO expectedBook = new BookDTO(20, "Конституция");
    
            // Полученная из маппера книга
            BookDTO actualBook = bookMapper.mapToDTO(20);
    
            // Сравниваем ожидаемую книгу и полученную книгу
            Assert.assertEquals(expectedBook, actualBook);
        }
    }


    Это очень утрированный пример. Зато мы теперь можем быть уверены, что если кто-то когда-то поменяет класс маппера так, что он начнёт возвращать другой результат, то тест упадёт, что будет указывать на то, что в других классах, использующих этот маппер так же потенциально может быть ошибка.

    В данном случае пример совсем простой. На реальном коде нужно тестировать все уникальные сценарии работы метода. Например, если в методе есть ветвление if, перебор switch, бросание исключения и т.д., то необходимо протестировать каждый вариант.
    Ответ написан
    Комментировать
  • Учебник по математике, при почти нулевых знаниях?

    @SeptiM
    Мне кажется, то, с чего нужно начинать, это дискретная математика. Можно сказать, это азбука для программиста. Я ниже приложил некоторый список книг. Стоит, правда, понять, хотите вы самостоятельно изучать предмет или иметь менторов и готовую программу...

    Дискретная математика

    Есть здоровская книжка Андерсона "Дискретная математика и комбинаторика". Она довольно толстая, но главы можно читать почти в случайном порядке. Некоторые математики жалуются, что она не очень строгая и много воды, но для начала самое то.

    По дискретной математике есть русский онлайн-курс на Stepic-е.

    Если идти чуть глубже, есть неплохая книжка Кнута и др. "Конкретная математика".

    Алгоритмы и структуры данных

    Кормен "Алгоритмы: построение и анализ" в переводе А. Шеня. Осилить первые две главы, потом можно идти почти в случайном порядке. Написано достаточно просто и понятно.

    Дасгупта, Пападимитриу, Вазирани "Алгоритмы".

    Онлайн-курс по алгоритмам.

    О математике

    МЦНМО свободно распространяет много интересных книг: www.mccme.ru/free-books
    Посмотрите там в первую очередь Шеня и Арнольда. Например, В. И. Арнольд. Задачи для детей от 5 до 15 лет.

    И разумеется не упустите замечательного писателя Мартина Гарднера "Математические головоломки и развлечения".

    Задачники

    Попрактиковаться в решении с проверкой можно здесь.

    www.braingames.ru -- по математике
    https://projecteuler.net/ -- среднее, ближе к программированию
    acm.timus.ru -- по программированию

    Очные программы

    Умение самоорганизоваться -- это хорошо, но иногда нужен ментор и готовая программа.
    Если вы живете в Москве или Петербурге, попытайте счастье в этих двух организациях:
    https://yandexdataschool.ru/
    https://compscicenter.ru/
    Если нет, но есть возможность на два года уйти в учебу, попробуйте поступить в магистратуру СПбАУ на SE-направление:
    mit.spbau.ru

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

    Удачи!
    Ответ написан
    3 комментария
  • Как добавить третий элемент в строку меню в navigation drawer?

    a13xsus
    @a13xsus
    Lazy developer
    Да, можно. Это actionLayout. Указывается в самой разметке меню:

    <menu>    
        <item
            android:id="@+id/messages_item"
            android:icon="@drawable/ic_notifications_neg"
            app:actionLayout="@layout/counter"
            android:title="@string/message_center"/>
    
        <item
            android:id="@+id/search_item"
            android:icon="@drawable/ic_search_neg"
            android:title="@string/search"/>
    </menu>


    counter.xml:

    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="26dp"
        android:layout_height="26dp"
        android:text="14"/>
    Ответ написан
    Комментировать
  • Как создать Google Play аккаунт после блокировки?

    @usv3
    Мне блокировали аккаунт разработчика 3 раза.

    По своему опыту хочу сказать что в случае блокировки аккаунта лучшее решение это - создать новый аккаунт на другого человека (жену, маму, папу, брата и тд...)

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

    Даже если все получится где гарантия что через какое то время (полгода, год, два) они не вычислят что правила были нарушены? Вам оно надо?
    Ответ написан
    3 комментария
  • С чего начать изучение серверов?

    @LiguidCool
    Гуглить JSON API или Restful.
    Сервер на PHP заводится на любом хостинге либо Node / Python на VPS.
    Если пишете на Яве, то в принципе можно и на ней.
    Ответ написан
    Комментировать
  • С чего начать изучение серверов?

    zooks
    @zooks
    Frontend
    1. Купить VPS
    2. На сервере уже установлена выбранная ОС. Нужно установить нужные языки.
    3. Python, Go.
    Ответ написан
    Комментировать
  • Вся информация в компьютере — это нули и единицы?

    Adamos
    @Adamos
    Попадалась как-то книжка под названием, помнится, просто "Code". Ну, или "The Code"...
    Там компьютерная логика разбиралась, начиная с механического реле.
    Вставляя мозги на место и избавляя от всяческих иллюзий.
    Сейчас, правда, тяжеловато нагуглить книгу с таким названием ;)
    Ответ написан
    2 комментария
  • Стоит ли переходить в mobile dev?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    [Обидный ответ]
    Нет. Занимайтесь тем, чем заставляют на работе. Потому что вместо того чтобы взять и начать книжку андройдовскую читать вы лезете в интырнеты за советами школьников.
    [/Обидный ответ]

    https://www.youtube.com/watch?v=ZXsQAXx_ao0
    Ответ написан
    Комментировать
  • Как задать выделение цветом для imageview?

    @Tiberal
    Например задать селектор, или переопределить метод onTouch для вьюхи, там детектить нажатие на нее и вызывать что то типа этого

    iv.getDrawable().setColorFilter(цвет,PorterDuff.Mode.SRC_ATOP);
    iv.invalidate();


    затем детектить отпускание и вызывать

    image.getDrawable().clearColorFilter();
    image.invalidate();


    чтоб снять выделение
    Ответ написан
    2 комментария
  • Как предотвратить запущенный PendingIntent?

    @creati8e
    Android разработчик
    Вам нужно создать новый PendingIntent с тем же requestCode и флагом, что и запущенный PendingIntent, который вы хотите отменить. И отменить только что созданный PeningIntent.
    Ответ написан
    1 комментарий