|
|
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
Добрий день Стоит задача протестировить EJB бины Готового решения от Oracle не нашел Поиск по гугл не дал нормального результата Пробывал создавать динимачески свой контейнер в тестах - долго, иногда глючит Пробывал как говорили копировать домен Глассфыша в папку проэкта, тоже не работает Единственное что роботает это сделать бины @Remote и вызывать из через @EJB клиет, но тогда нужно все время деплоить их на сервер Как вы тестируете @EJB? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 13:51 |
|
||
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
denis111111, Не очень понятно что именно тестировать собрались. Если обычные юнит-тесты, то EJB 3 это же теперь POJO с аннотациями. Инъектишь зависимости и проверяешь методы. Или есть задача полный цикл протестировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 14:08 |
|
||
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
denis111111Как вы тестируете @EJB? http://arquillian.org/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 14:08 |
|
||
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
Blazkowiczdenis111111, Не очень понятно что именно тестировать собрались. Если обычные юнит-тесты, то EJB 3 это же теперь POJO с аннотациями. Инъектишь зависимости и проверяешь методы. Или есть задача полный цикл протестировать? Я бы так и тестировал, но много методов пишет данные в БД, значит нужны транзакции, а у меня транзакции неявно делает EJB контейнер Также в меня много EJB инъекций бинов например @EJB private SomeService someService; Если тестировать как POJO я банально не смогу вставить someService, так как нет метода setSomeService(SomeService someService) WGA http://arquillian.org/ Надо посмотреть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 14:28 |
|
||
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
denis111111@EJB private SomeService someService; Если тестировать как POJO я банально не смогу вставить someService, так как нет метода setSomeService(SomeService someService) Только неделю назад об этом писал: Every time you inject to a field, a unit test dies. Юнит тесты строго диктуют правила написания кода. Нельзя просто так наговнокодить и потом писать для этого тесты. И ещё, как я уже писал в предыдущей теме, package private модификатор рулит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 14:32 |
|
||
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
denis111111Я бы так и тестировал, но много методов пишет данные в БД, значит нужны транзакции, а у меня транзакции неявно делает EJB контейнер Это уже не unit test будет, ну никак. А для интеграционных тестов, я тоже не вижу никакой сложности. Инжектим какой-то EM для тестов. Уверен готовый решений для этого полно. А транзакцию вручную стартуем перед дестом сценария. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 14:35 |
|
||
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Согласен Буду смотреть в сторону интеграционных тестов у меня нельзя открыть транзакцию, выполнить метод, закрить, так как для внутренней логики нужно делать несколько комитов во время выполнения метода. Вам приходилось тестировать EJB через интеграционные тесты, если да, то как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 14:59 |
|
||
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
Blazkowiczdenis111111Я бы так и тестировал, но много методов пишет данные в БД, значит нужны транзакции, а у меня транзакции неявно делает EJB контейнер Это уже не unit test будет, ну никак. А для интеграционных тестов, я тоже не вижу никакой сложности. Инжектим какой-то EM для тестов. Уверен готовый решений для этого полно. А транзакцию вручную стартуем перед дестом сценария.При наличии CMT будет затруднительно все это проделать. Стандарту JEE лучше всего соответствует сервер приложений ) Хочешь достоверных тестов для сценариев с транзакциями - поднимай интеграционные тесты с реальным контейнером. ИМХО. У нас сформировался следующий типовой подход к тестированию. В основном системы это REST- и SOAP-сервисы. Так что и тестируем непосредственно внешнее API. Пишем абстрактный класс, например, BaseTest. В нем содержатся все тесты. От него наследуются два потомка: AppIT и AppFT. Первый - тесты в контейнере (Glassfish Embedded или Wildfly Embedded с недавних пор). Второе основное различие - при IT некоторые системы могут быть подменены моками с использованием механизама @Alternative из CDI, в FT же все честно, вызываем реальные методы. Соответственно некоторые тесты в FT отключаем перекрывая родительский метод. В AppIT поднимается контейнер с использованием Arquillian. Обращение к ресурсам на localhost и каком-нибудь случайном порту, чтобы тесты не конфликтовали. В BaseTest адрес не определен, получаем от потомка. AppFT принимает адрес из системных свойств, можно "натравить" тесты на любой тестовый сервер. Можно использовать и для мониторинга текущего состояния, а не только при сборке. Учитывая, что все задачи - интеграционные очень помогает выяснить что и когда отвалилось из внешних систем. Ну и, наконец, встраиваем все это в Maven сборку. Настраиваем maven-surefire-plugin игнорить тесты с **/*IT.java и **/*FT.java, а maven-failsafe-plugin учим выполнять только **/*IT.java и **/*FT.java в зависимости от профиля. Так можно собрать тесты как с интеграционными тестами, так и без них. Учитывая, что выполняются они долго это полезно. Кстати, чтобы сэкономить на поднятии контейнера классов тестов делаем немного и они иногда получаются очень большими. Есть такой недостаток. Все описанное можно применить и для тестирования отдельных EJB. Все еще проще - делаем @Inject EJB-бина, вызываем его методы. Я в качестве эксперимента делал такие тесты. Даже научил откатывать транзакцию после исполнения каждого теста. Все как в spring-testing )) Реальный пример. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 22:39 |
|
||
|
Тестирование EJB бинов
|
|||
|---|---|---|---|
|
#18+
denis111111Я бы так и тестировал, но много методов пишет данные в БД, значит нужны транзакции, а у меня транзакции неявно делает EJB контейнер Также в меня много EJB инъекций бинов например @EJB private SomeService someService; Если тестировать как POJO я банально не смогу вставить someService, так как нет метода setSomeService(SomeService someService) WGA http://arquillian.org/ Надо посмотреть... TestNG поддерживает @inject от guice. Поэтому у меня проблем нет :D А вот для EJB'шных... Наверное лучше всего будет сделать переменные package-visible и вставлять моки в @Before. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 08:04 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39125397&tid=2124569]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 394ms |

| 0 / 0 |
