Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 4 5 6 7 8 [9] 10 11 12 13 .. 15   вперед  Ctrl
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
mayton
Member

Откуда: loopback
Сообщений: 39868
Мда.. Тесты не должны базироваться на таких сложных моках. В противном случае надо
тестировать и сами моки. И зачем там цикл? Непонятно. Можно было на 1-й итерации
прогнать все кейсы?
12 апр 19, 01:14    [21860051]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3182
Sergunka
Иными словами Вам удалось освоить JUnit test... поздравляю нормальный результат... есть куда рости
Нет там JUnit никакого, просто показано как правильно реализовывать проверки, едем дальше:

	@Given("^a customer with name \"([^\"]*)\" and phone number \"([^\"]*)\" _Customer_$")
	public void a_customer_with_name_and_phone_number__Customer_(
			String customerName, String customerPhone) throws Throwable {
		customer.setAssetId(customerName);
		customer.setPhone(customerPhone);
		customer.setUri("/customer/" + customerName);
        List<Customer> list = new ArrayList<>();
        list.add(customer);
		rest.post(config.paths.prefix + "/customer", JsonMapper.toJson(list));
	}

	@Then("^the customer with name \"([^\"]*)\" and phone number \"([^\"]*)\" should be returned _Customer_$")
	public void the_customer_with_name_and_phone_number_should_be_returned__Customer_(
			String customerId, String customerPhone) throws Throwable {
		assertTrue(customer.getAssetId().equalsIgnoreCase(customerId));
		assertTrue(customer.getPhone().equalsIgnoreCase(customerPhone));
	}


Смотрим что такое Customer:

    /**
     * serial number for Asset
     * 
     */
    @JsonProperty("assetId")
    private String assetId;

    /**
     * Name
     * (Required)
     * 
     */
    @JsonProperty("name")
    private String name;


ой. Получается, что в сценарии вас просят работать с именем, а вы вместо этого работаете с assetId и при этом все "зеленое", более того, контракт на заполненность имени нигде не форсируется и не проверяется, зато тесты зеленые, ревью делать не нужно - можно сразу в прод засылать. Еще один плохой момент в реализации ваших тестов: если разработчику понадобится переименовать поля pojo, то тестовые сценарии не развалятся - геттеры и сеттеры переименует IDE, а вот в cucumber как торчали "customer with name" так останутся торчать.

В целом, подход что вы описываете, а именно:

Sergunka
Давайте опять про то как должно быть.

Открываешь Jiru там уже написана задача к примеру на спринт т.е. 2 недели

1) видишь описание бизнес кейса т.е. преполагается, что это фича пришла от продакт оунера
2) тут же расписан твой тест кейс на Cucumber
3) Acceptance criteria

Копируешь огурец в тест - и потихоньку начинаешь кодить последовательно. Тест прошел задача практически выполнена.


Вообще никакого отношения к разработке не имеет: существует какое-то преклонение перед BDD, в процессе этого преклонения создаются какие-то артефакты, но толку от них нет никакого просто потому что сам по себе процесс дырявый. И беда не в том, что BDD плохой (хотя этот DSL нужно поддерживать, что печально), а в том что вы неправильно его применяете:
  • тесты должны разрабатываться (или хотябы рецензироваться) людьми, которые этим профессионально занимаются, подход типа "вот сделай фичу и сам покрой его тестами" много где имеет место быть, но в целом он неправильный (ваши корявые реализации тому подтверждение)
  • зелень в тестах - это не повод принять изменения от разработчика в основную ветку, это лишь повод сделать-таки ревью коду (и особо тщательное ревью тестам, если они поменялись или появились новые)
  • 12 апр 19, 06:53    [21860078]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    Андрей Панфилов
    Member

    Откуда: Москва > Melbourne
    Сообщений: 3182
    Leonid Kudryavtsev
    дело не в узко, а в том, что я тогда вообще не понимаю, что у людей лежит в src/test )))

    Для меня, src/test в первую очередь "проверка того, что не нарушилась работоспособность работающей ранее функциональности, если её код мог быть затронут при исправлении некоторых дефектов в другой функциональности" ( C ) wiki
    Ну давайте поразмыслим вместе. То что лежит в src/test относится к так называемому white box testing, т.е. в абсолютном большинстве это или юнит-тесты, или интеграционные, которые в свою очередь реализуют разработчики (ну или люди, обладающие скилом разработчика). Вот вам нравится цитировать википедию, а там в той же статье написано:
    wiki
    In the corporate world, regression testing has traditionally been performed by a software quality assurance team after the development team has completed work. However, defects found at this stage are the most costly to fix. This problem is being addressed by the rise of unit testing. Although developers have always written test cases as part of the development cycle, these test cases have generally been either functional tests or unit tests that verify only intended outcomes. Developer testing compels a developer to focus on unit testing and to include both positive and negative test cases.
    И вот в разрезе юнит-тестов (т.е. там где мы тестируем небольшие участки кода), я как-то слабо себе представляю наличие регрессий:

    - то, что было до изменений покрыто тестами, то либо продолжит работать, либо развалится, однако самого процесса регрессионного тестирования здесь нет - мы просто всегда запускаем тесты, которые у нас есть (здесь можно как-то с ну очень большой натяжкой утверждать, что "ну вот мы же запускаем все тесты подряд, т.е. полностью тестируем систему, а это и есть регрессионное тестирование", но самого процесса здесь нет: запустить все юнит-тесты - это функция CI, а не процесс)
    - то что тестами покрыто не было, имеет все шансы развалиться, однако не факт что оно и до этого работало правильно, ну т.е. оно про то что юнит-тесты нужно писать, а не про то что в разрезе юнит-тестов существует процесс регрессионного тестирования

    Т.е. получается так, что там где мы действительно можем (и должны) проверить наличие (или отсутствие) регрессий - это либо интеграционные тесты, либо "ручное тестирование" (т.е. то что делает команда QA, руками они это делают или нет - не суть важно) и здесь начинаются "приколы", которые мало зависят от разработчика, а именно:

    - мы можем хоть как-то надеяться, что конечный разработчик сделает интеграционные тесты для своих модулей, однако, ожидать что он также сделает интеграционные тесты для модулей/сервисов, о которых он даже не знает, несколько наивно: во-первых, в большинстве случаев он просто о них не знает, во-вторых, развертывание чужеродных сред и их тестирование - это не его задача, все что мы может здесь сделать - это полноценно (предоставить спецификацию, входные/выходные данные, подготовить среду и пр.) поставить задачу подготовить интеграционные тесты, если же задачи нет, то и рассчитывать на положительный выхлоп здесь не следует.
    12 апр 19, 07:58    [21860096]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    Sergunka
    Member

    Откуда:
    Сообщений: 1735
    автор
    Regression Testing is defined as a type of software testing to confirm that a recent program or code change has not adversely affected existing features. Regression Testing is nothing but a full or partial selection of already executed test cases which are re-executed to ensure existing functionalities work fine


    На самом деле регрессия нужна исключительно для рефакторинга.
    12 апр 19, 08:16    [21860108]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    vas0
    Member

    Откуда: Таможенный союз (Россия, Казахстан)
    Сообщений: 1160
    mayton
    Мда.. Тесты не должны базироваться на таких сложных моках. В противном случае надо
    тестировать и сами моки. И зачем там цикл? Непонятно. Можно было на 1-й итерации
    прогнать все кейсы?


    Честно говоря даже не хочется разбираться что там человек имел ввиду и что именно он тестирует.

    Просто пример как можно засунуть в сервис моков, сначала "героически" их подготавливая, а потом также "героически" проверяя как они отрабатывают вызывая кучу verify. На мой взгляд это куча тестового кода, который непонятно что тестирует. И этот код достаточно сложно поддерживать, небольшие изменения в сервисе приводят к тому что мок тесты слетают.

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

    Все модели неверны, но некоторые полезны. (С)
    12 апр 19, 09:43    [21860168]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 5044
    На мой взгляд тесты должны описывать то, как работать с системой разработчику. И одновременно тестировать бизнес кейсы там, где не требуется поднимать окружение. Я умных слов про тесты не знаю, но когда я захожу в новый проект, я первым делом иду в тесты посмотреть, как вызывать тот или иной метод, для чего и почему.
    12 апр 19, 09:49    [21860176]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    vas0
    Member

    Откуда: Таможенный союз (Россия, Казахстан)
    Сообщений: 1160
    Озверин
    И одновременно тестировать бизнес кейсы там, где не требуется поднимать окружение.

    На мой взгляд раньше поднимать окружение было проблемой. Отсюда и появление всех этих Mock-ов. С такими технологиями как docker подготовка тестовой среды перестает быть проблемой. Запускаешь подготовленный контейнер и тестируешь. Конечно по времени выполнения это долго, но тут реальные приемочные тесты, а не тестирование коней в вакууме.
    12 апр 19, 10:05    [21860202]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39868
    В одной итерации.

                final String iin = context.businessUsers.get(0).getIin();
                final String email = context.users.get(0).getEmail();
                final String enterpriseTin = context.businessUsers.get(0).getTin();
    
                when(userDao.getUser(iin, LocaleUtils.RU)).thenReturn(context.users.get(0));
                when(enterpriseAdminChangeMessageGenerator.generate(email, enterpriseTin, iin, context.daysBeforeBlock)).thenReturn(context.notifyMessage);
                when(blockEnterpriseMessageGenerator.generate(email, enterpriseTin, iin)).thenReturn(context.blockMessage);
    

    Беря во внимание что это еще не тест а просто инициализация мока. Тем не менее.

    Я-бы правила мока расписал тоже по классической схеме Given/When/Then. Заменил бы магические
    ссылки на контекст просто константами. Например. Зачем мы берем из контекста какой-то грёбаный емейл?
    Кейсы пишутся явно. Например.

     final String email = "vasya.pupkin@gmail.com";
    


    Для меня самого есть хорошее правило. Я тесты должен читать как плоский английский текст.
    Хороший вариант - использовать ассерты с текстовыми комментариями. Хороший вариант - юзать Хамкрест.

    Еще хороший вариант писать методы на Spock/Groovy.

    Но здесь сложно судить т.к мы всё равно не видим теста. А автор показал только инициализацию.
    12 апр 19, 10:14    [21860207]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    Petro123
    Member

    Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
    Сообщений: 37971
    vas0
    технологиями как docker подготовка тестовой среды перестает быть проблемой.
    вооот. Эта тема Ещё интереснее чем REST тестирование)
    12 апр 19, 10:32    [21860234]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39868
    +1

    Тему докера в тестировании я-бы поднял отдельно.
    12 апр 19, 11:04    [21860267]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    alex55555
    Member

    Откуда:
    Сообщений: 1966
    mayton
    В какой части например?

    Что в какой части? Как под линух на сях писать что-ли?
    12 апр 19, 12:25    [21860387]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    alex55555
    Member

    Откуда:
    Сообщений: 1966
    Leonid Kudryavtsev
    Regression Test ?
    Если кто-то поступил по своему и это сломало "наложения прежних времен", то сразу должно быть видно.

    Может и в новом кейсе неучёт старых особенностей проявиться.
    12 апр 19, 12:26    [21860392]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    alex55555
    Member

    Откуда:
    Сообщений: 1966
    казинак
    это в ипанутых системах они наслаиваются
    патамушта там поклоняются фаулеру и пишут километры оберток (лейеров),
    то бишь универсальных классов, которые должны использоваться ВЕЗДЕ

    а в норм системах, парэкзампль, изменение в логике начисления процентов не сломает заведение договоров
    патамушто норм система реализована модульно, и в случае выхода из строя одного модуля, другие не ломаются

    Логика начисления процентов сложная. Вот тебе тривиальный пример:

    Проценты зависят от грейда клиента. Ты протестил грейды когда-то давно и потом мгновенно забыл о них. Затем тебе дали кейс с начислением бонусов. Ты протестил бонусы и опять мгновенно забыл. Но. Ты никогда даже не мог подумать, что грейды влияют на дополнительные проверки клиента. И ты просто задал в своём кейсе "правильный" грейд, который тупо подошёл и не вызвал проблем. И вот в бою начисляют бонусы вип-клиенту (это такой пальцатый перец с подвязками, который из тебя потом котлету сделает). Ну и грейд перца вызвал непродуманную тобой цепочку действий. И всё. Ты попал.
    12 апр 19, 12:31    [21860400]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    alex55555
    Member

    Откуда:
    Сообщений: 1966
    Sergunka
    На самом деле регрессия нужна исключительно для рефакторинга.

    Причиной изменения софта в большинстве случаев является желание заказчика. Как бы азбука.
    12 апр 19, 12:32    [21860407]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 5044
    казинак
    это в ипанутых системах они наслаиваются
    патамушта там поклоняются фаулеру и пишут километры оберток (лейеров),
    то бишь универсальных классов, которые должны использоваться ВЕЗДЕ


    аж чето удивился, оказывается Фаулер выступал за суперклассы, а не против.
    12 апр 19, 12:52    [21860440]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    Sergunka
    Member

    Откуда:
    Сообщений: 1735
    alex55555
    Sergunka
    На самом деле регрессия нужна исключительно для рефакторинга.

    Причиной изменения софта в большинстве случаев является желание заказчика. Как бы азбука.


    Не всегда если смотреть с точки зрения сопровождения легаси кода и баг фиксинга, то да никто не будет трогать код если заказчик не просит внести изменения. Поверьте есть места где занимаются разработкой с нуля, там рефакторинг практически происходит ежедневно, так как разработчики думают о маентабилити этого кода в будущем.

    В США прижился лозунг

    автор
    Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
    12 апр 19, 17:44    [21860746]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39868
    alex55555
    mayton
    В какой части например?

    Что в какой части? Как под линух на сях писать что-ли?

    Да. Да. Скажи что ты хотел сказать.
    12 апр 19, 18:04    [21860767]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    казинак
    Member

    Откуда:
    Сообщений: 1250
    Sergunka
    так как разработчики думают о маентабилити этого кода в будущем.

    В США прижился лозунг

    автор
    Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
    имхо, это просто такой лозунг впаривают, чтоб подолгу сидели над своим кодом
    а в это время другие, более разумные, продают продукты или услуги, а не код

    ну какая нах разница, для пользователя али експресса или субд оракл, как там написан код?!!!
    и насколько он мэйнтенабле
    работает правильно? значит норм
    вот когда глючит, тогда проблема

    зы
    есличо, на ентом форуме насчет качества кода, новый срач чуть ли не каждый квартал...
    12 апр 19, 18:18    [21860784]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39868
    казинак
    Sergunka
    так как разработчики думают о маентабилити этого кода в будущем.

    В США прижился лозунг

    пропущено...
    имхо, это просто такой лозунг впаривают, чтоб подолгу сидели над своим кодом
    а в это время другие, более разумные, продают продукты или услуги, а не код

    ну какая нах разница, для пользователя али експресса или субд оракл, как там написан код?!!!
    и насколько он мэйнтенабле
    работает правильно? значит норм
    вот когда глючит, тогда проблема

    зы
    есличо, на ентом форуме насчет качества кода, новый срач чуть ли не каждый квартал...

    У тебя - странный профиль. Оракл + Работа.

    Есть опыт разработки Java?
    12 апр 19, 18:25    [21860788]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    chpasha
    Member

    Откуда:
    Сообщений: 7693
    Sergunka
    о маентабилити

    дружище, соберись, невозможно подобное читать
    12 апр 19, 18:27    [21860792]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    казинак
    Member

    Откуда:
    Сообщений: 1250
    mayton
    казинак
    пропущено...
    имхо, это просто такой лозунг впаривают, чтоб подолгу сидели над своим кодом
    а в это время другие, более разумные, продают продукты или услуги, а не код

    ну какая нах разница, для пользователя али експресса или субд оракл, как там написан код?!!!
    и насколько он мэйнтенабле
    работает правильно? значит норм
    вот когда глючит, тогда проблема

    зы
    есличо, на ентом форуме насчет качества кода, новый срач чуть ли не каждый квартал...

    У тебя - странный профиль. Оракл + Работа.

    Есть опыт разработки Java?

    бгг
    напоминает диалог паниковского с шурой балагановым: "а ты кто такой?"

    зы
    но есличо, писал на jsp, и даже на такой куйне как Visual J++
    как одмин ставил и тюнил вебложик, wildfly, glfssfish

    как то присел за java ee 7, jsf, ejb, jpa, был вариант проект сделать, потом отвалился
    и слава богу,
    если честно жава у меня только отвращение вызывает

    но тут же топик про тестирование а не про жабу, пусть даже и в разделе жабы
    или я ошипся?
    12 апр 19, 18:40    [21860808]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39868
    Я просто поинтересовался.

    Ты написал такую вещь
    ну какая нах разница, для пользователя али експресса или субд оракл, как там написан код?!!!

    И я сильно удивился.

    Это противоречит современным (подтверждённым!) практикам Java-разработки и я сделал предположение
    что ты с этой (Java) разработкой не знаком. Или был может быть когда-то знаком...

    Профиль - хорошая штука.
    12 апр 19, 18:57    [21860823]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    казинак
    Member

    Откуда:
    Сообщений: 1250
    mayton
    Это противоречит современным (подтверждённым!) практикам Java-разработки и я сделал предположение
    что ты с этой (Java) разработкой не знаком. Или был может быть когда-то знаком....

    ну а я посмотрел твой профиль и понял, что, хоть ты и зарегился тут в 2004 году, самостоятельно мыслить ты еще не научился
    ну какие нах подтвержденные практики???

    тут блин раз в пару лет, полностью опровергают то что раньше в ранг догмы возводили
    к примеру
    раньше считали что css надо отдельно держать и они должны быть для всех страниц
    но в реакте styled components наоборот для кажд компонента отдельный inline css

    или,
    том кайт считал что бизнес логику надо в базе делать, а фейсбук сказал, что никакой функциональности в базе,
    никаких джойнов или форин кей

    кто прав?
    наверно майтон
    12 апр 19, 19:16    [21860834]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    Petro123
    Member

    Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
    Сообщений: 37971
    казинак
    том кайт считал
    том кайт иноверец был. Базист). Он с противоположного от java лагеря.
    А то что всё течет и все меняется это ты прав конечно)
    12 апр 19, 19:22    [21860836]     Ответить | Цитировать Сообщить модератору
     Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
    love_bach
    Member

    Откуда:
    Сообщений: 457
    mayton
    Тесты не должны базироваться на таких сложных моках. В противном случае надо
    тестировать и сами моки


    круг замкнулся :)
    12 апр 19, 19:51    [21860846]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 .. 4 5 6 7 8 [9] 10 11 12 13 .. 15   вперед  Ctrl
    Все форумы / Java Ответить