@jvmchat

Страница 589 из 2890
Ivan
25.09.2016
16:46:17
для меня это больная тема на самом деле

?

Pavel ?
25.09.2016
16:49:33
Тут как бы надо смотреть на то сколько будет народу пилить проект)) если один два то и хрен с ним, если толпа то...

Google
Ivan
25.09.2016
16:58:53
ну после пары лет работы со Spring я понял что некоторые вещи лучше делать не на нем, Spring загоняет в очень жесткие рамки выйти за пределы которых иногда очень сложно, иногда возникают ошибки которые решаешь днями, копая тонны документации и лазия по коду Spring, некоторые решения так прибиты гвоздями что лучше их не использовать например: есть бин @Bean public Clock clock() { return Clock.systemDefaultZone(); } в тестах мне нужно его переопределить и я делаю это примерно так @Configuration public static class TestConfig { @Bean @Primary public Clock clock() { return Clock.fixed(Instant.from(ZonedDateTime.of(2016, 8, 15, 0, 0, 0, 0, ZoneId.systemDefault())), ZoneId.systemDefault()); } } все ок работает но вот незадача тесты с 0.5 секунд на выполнение улетают в 10-12 секунд, времени править эту проблему нет, и выполнение тестов увеличивается на целых 10 секунд

Митко Соловец?
25.09.2016
17:13:27
эм, а зачем бин тут?

у тебя же есть фабричный статик метод

Ivan
25.09.2016
17:14:31
да

Pavel ?
25.09.2016
17:14:47
Ну так создай тестовый контекст, поможет

Ivan
25.09.2016
17:15:49
не понял, я использую аннотацию ContextConfiguration

на тесте

я не так что то делаю?

Pavel ?
25.09.2016
17:16:31
Копипастни тест

Плиз

Митко Соловец?
25.09.2016
17:16:38
т.е. ты используешь основной контекст, но какие-то бины моками подменяешь?

Google
Pavel ?
25.09.2016
17:17:01
Как я понял

Митко Соловец?
25.09.2016
17:17:09
ну указывает, какие бины приоритетней

а так контекст от основного приложения

Ivan
25.09.2016
17:17:47
тут один бин конкретно, сейчас скину код @Transactional @Rollback @TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionDbUnitTestExecutionListener.class}) @ContextConfiguration(loader = SpringApplicationContextLoader.class, classes = {Application.class, SubProjectServiceTest.TestConfig.class}) public class ProjectServiceTest extends AuthorizedUserTest { @Configuration public static class TestConfig { @Bean @Primary public Clock clock() { return Clock.fixed(Instant.from(ZonedDateTime.of(2016, 8, 15, 0, 0, 0, 0, ZoneId.systemDefault())), ZoneId.systemDefault()); } } .... }

Митко Соловец?
25.09.2016
17:17:50
попробуй убрать праймари и без него посмотри, что происходит

Application.class, SubProjectServiceTest.TestConfig.class

ну понял

Ivan
25.09.2016
17:18:19
если убрать примари то Spring ругнется что не понимает какой бин инжектить скорее всего

Митко Соловец?
25.09.2016
17:18:31
или заинжекти не тестовую

твоя цель выявить, как поведет перфоманс себя

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

тогда просто подменять руками будешь

я бы так поступил

Ivan
25.09.2016
17:19:20
возможно еще виноват static класс

может с эти проблемы

Митко Соловец?
25.09.2016
17:19:27
эмммм

конечно

бины + статик классы не рекомендованы к использованию

я же выше писал, есть фабрика - используй напрямую

Google
Митко Соловец?
25.09.2016
17:20:00
там могут прокси тормозить

Ivan
25.09.2016
17:20:24
что ты имеешь ввиду говоря фабрика?

Митко Соловец?
25.09.2016
17:20:36
метод, который тебе экземпляр возвращает)

Clock.systemDefaultZone()

Ivan
25.09.2016
17:24:31
я не полностью все описал, Clock нужен чтобы метод now возвращал нужную мне дату в рантайме это системное время, в тестах определенное мной Clock инжектится в разные сервисы где уже используется в LocalDate.now(clock); конкретно в этом тесте еще инжектится сам сервис SubProjectService логика которого тестируется

можно конечно сделать subProjectService.setClock()

Митко Соловец?
25.09.2016
17:25:51
https://docs.oracle.com/javase/8/docs/api/java/time/Clock.html

этот класс?

Ivan
25.09.2016
17:26:11
да

Митко Соловец?
25.09.2016
17:26:37
Clock() Constructor accessible by subclasses.

Modifier protected

конструктор непубличный, вполне спрингу может понадобится время на дополнительные манипуляции)

Ivan
25.09.2016
17:28:34
и вот прикинь ты уже сидишь и строишь теории

и я так

нашел ошибку пару часов сижу

Митко Соловец?
25.09.2016
17:28:59
ну я стараюсь не делать бинов из классов библиотек, да еще и статических

Ivan
25.09.2016
17:29:51
ну здесь я сделал чтобы иметь возможность тестировать, потому что вызывать LocalDate.now() совсем плохо

Митко Соловец?
25.09.2016
17:30:19
http://stackoverflow.com/questions/27067049/unit-testing-a-class-with-a-java-8-clock

может это пригодится

можно конечно сделать subProjectService.setClock()
это тоже нормальный вариант

Google
Ivan
25.09.2016
17:39:42
еще по спрингу, вот есть у него аннотация @ModelAttribute а какой от нее реальный толк? все равно юзаешь model.addAttribute там где тебе нужно чтобы не делать лишних запросов и вообще лишней работы при загрузке страницы, получается целая фича фреймворка не нужна

Митко Соловец?
25.09.2016
17:40:45
эм, в смысле?

как ты, например без этой аннотации свяжешь форму и свою ДТОшку?

может стоит лучше изучить инструмент ?

чтобы такие громкие заявления делать...

Ivan
25.09.2016
17:41:44
model.addAttribute

все связал

model.addAttribute("dto", dto);

Митко Соловец?
25.09.2016
17:42:06
@Secured({"ROLE_USER", "ROLE_MODERATOR", "ROLE_ADMIN"}) @RequestMapping(value = "/profile/edit", method = RequestMethod.POST) public ModelAndView editAccount(@ModelAttribute("account") RegisterDTO account) { final Account edited = accountService.editProfile(new Account(account)); SecurityUtils.updateSessionInfo(edited); return new ModelAndView("redirect:/profile"); }

Ivan
25.09.2016
17:42:09
а ты имеешь ввиду данные из формы?

Admin
ERROR: S client not available

Митко Соловец?
25.09.2016
17:42:12
например

Ivan
25.09.2016
17:42:19
так они вяжется и без @ModelAttribute

попробуй убери @ModelAttribute

в POST запросе

Митко Соловец?
25.09.2016
17:42:49
попробуй убери @ModelAttribute
когда я это делал, у меня дтошка пустая приходила)

Ivan
25.09.2016
17:43:01
@ModelAttribute в этом случае для других целей используется

делаешь метод

@ModelAttribute public Project getProject(@RequestParam(value = "id", required = false) Long id) { return id == null ? new Project() : entityService.findOneJoinAll(id); }

Google
Ivan
25.09.2016
17:43:27
и у тебя будет либо объект из БД либо новый во время биндинга формы

а так чтобы данные с формы были забинжены нужно просто BindingResult после DTO

когда ты ее на параметр вешаешь этот параметр так же автоматом добавляется в модель вьюхи

Митко Соловец?
25.09.2016
17:45:49
мне просто изменить надо было аттрибут модели

коим являлся аккаунт )

Ivan
25.09.2016
17:47:03
кстати если гуглить @ModelAttribute то половину вопросо а что делает эта аннотация

Митко Соловец?
25.09.2016
17:47:32
и там написано, что написал выше ты и я)

Ivan
25.09.2016
17:48:12
а ну ты скорее всего искал как

аттрибут

засетить

я понял

Митко Соловец?
25.09.2016
17:48:51
мне нужно было, чтобы обновив сведения об аккаунте, содержимое формы на респонсе тоже обновилось)

Ivan
25.09.2016
17:48:59
понял

Митко Соловец?
25.09.2016
17:49:34
ну а вообще, редко я такими инструментами MVC пользуюсь, в последнее время только @RestController

Ivan
25.09.2016
17:52:03
как раз я думаю что нибудь полегче юзать для этих целей

Митко Соловец?
25.09.2016
17:52:13
спарк

Ivan
25.09.2016
17:52:44
ну да, а как отдаете объекты по ресту? я имею ввиду не пользуетесь спринговыми репозиториями

?

Митко Соловец?
25.09.2016
17:52:58
что ты имеешь в виду?

Ivan
25.09.2016
17:53:57
у спринга была какая то либа которая прям ответы методов spring data repository(ну конкретно JPA например) умела преобразовывать в JSON

Митко Соловец?
25.09.2016
17:54:04
понял

Ivan
25.09.2016
17:54:08
Spring REST Вроде

Митко Соловец?
25.09.2016
17:54:09
ты про спринг дата рест

Страница 589 из 2890