Регистрация  |  Вход

10 принципов тестирования Apex

Привет.

Вот наткнулся на главной странице developer.salesforce.com (давно не заходил туда, даже дизайн не узнал)
на ссылку на интересную статью по теме Тестирования Apex

Там 2 видео туториала - так что можно особо не напрягать мозг чтением и просто послушать умных людей.

10 Principles of Apex Testing

Привет.

Вот наткнулся на главной странице developer.salesforce.com (давно не заходил туда, даже дизайн не узнал)
на ссылку на интересную статью по теме [b]Тестирования Apex[/b]

Там 2 видео туториала - так что можно особо не напрягать мозг чтением и просто послушать умных людей.

[url=https://developer.salesforce.com/events/webinars/Apex_Testing?d=70130000000NKm4]10 Principles of Apex Testing[/url]

Ничего нового для ебя не увидел.
Принципы везде одиаковые.

Ничего нового для ебя не увидел. :(
Принципы везде одиаковые.

А может есть что добавить что там не увидел?

А может есть что добавить что там не увидел? ;) 

Большая часть инфы в презентации уже известна (хотя эти знания и находились долгим методом проб и ошибок).

но много интересных деталей. как говорится "черт сидит в мелочах".

на слайде 23 используются:
- AwesomeTestLib чтоб получить юзера с нужным профайлом.
- UtilityClass устанавливает пермишин
- Аккаунт получают из TestFactory, как выясняется позже - вполне реальной...

просто прекрасно.


domain specific test helper учат помечать @isTest... полезно

как на слайде 34 он использует моск, я так и не понял, но можно позже разобраться..

а еще пишет
Mock anything you have in your service layer.
автор думает, что у нас есть service layer.
Оптимист...

также не понятно о чем это здесь (39):
Write your Visualforce controllers to use a single wrapper object.

Про Continuouis Integration - это очень важно, но я не понимаю как это физически сделать:
every code-change committed to your source repository triggers a full run of the tests. как можно для этого использовать Travis, Drone...
все что я могу - это заранить все тесты (после размещения новых классов) непосредтвенно через стандартный орговый UI или Дев Консоль. Как мне могут помочь эти тулсы? или они работают как плагины в IDE, которые помогают автоматически ранить все тесты и показывают результат?

есть вопросы. и это хорошо

Большая часть инфы в презентации уже известна (хотя эти знания и находились долгим методом проб и ошибок).

но много интересных деталей. как говорится "черт сидит в мелочах".

на слайде 23 используются:
- AwesomeTestLib чтоб получить юзера с нужным профайлом.
- UtilityClass устанавливает пермишин
- Аккаунт получают из TestFactory, как выясняется позже - вполне реальной...

просто прекрасно.


domain specific test helper учат помечать @isTest... полезно

как на слайде 34 он использует моск, я так и не понял, но можно позже разобраться..

а еще пишет 
Mock anything you have in your [b]service layer[/b].
автор думает, что у нас есть  service layer. 
Оптимист...

также не понятно о чем это здесь (39):
Write your Visualforce controllers to use a single wrapper object.

Про Continuouis Integration - это очень важно, но я не понимаю  как это физически сделать:
every code-change committed to your source repository triggers a full run of the tests. как можно для этого использовать Travis, Drone...
все что я могу - это заранить все тесты (после размещения новых классов) непосредтвенно через стандартный орговый UI или Дев Консоль. Как мне могут помочь эти тулсы? или они работают как плагины в IDE, которые помогают автоматически ранить все тесты и показывают результат?

есть вопросы. и это хорошо

Den Brown
также не понятно о чем это здесь (39):
Write your Visualforce controllers to use a single wrapper object.

Суть в том что считается плохой практикой использовать на странице домнные объекты, вместо них используются DTO и лучше и удобнее, чтобы это был 1 DTO а не 100500.
Den Brown
Про Continuouis Integration - это очень важно, но я не понимаю как это физически сделать:

Суть в том, что весь твой код хранится в репозитории, ты делаешь изменение, коммитишь его, CI следит за изменениями, заливает их на сервер, запускает тесты.
Den Brown
Как мне могут помочь эти тулсы? или они работают как плагины в IDE, которые помогают автоматически ранить все тесты и показывают результат?

Это отдельные приложения.

[quote="Den Brown"]также не понятно о чем это здесь (39):
Write your Visualforce controllers to use a single wrapper object.[/quote]
Суть в том что считается плохой практикой использовать на странице домнные объекты, вместо них используются DTO и лучше и удобнее, чтобы это был 1 DTO а не 100500.
[quote="Den Brown"]Про Continuouis Integration - это очень важно, но я не понимаю как это физически сделать: [/quote]
Суть в том, что весь твой код хранится в репозитории, ты делаешь изменение, коммитишь его, CI следит за изменениями, заливает их на сервер, запускает тесты.
[quote="Den Brown"] Как мне могут помочь эти тулсы? или они работают как плагины в IDE, которые помогают автоматически ранить все тесты и показывают результат?[/quote]
Это отдельные приложения.

Gres
считается плохой практикой использовать на странице домнные объекты, вместо них используются DTO и лучше и удобнее, чтобы это был 1 DTO

то есть Контроллер вообще не общается с sObjects (доменные объекты, БД) напрямую? он работает только с каким то промежуточным объектом? а что это дает?

ну как что: reusability. а потом, тестить контроллер можно вообще без создания даже тестовых данных, так получается? а если этот DTO вообще один на всех... очень интересно...

[quote="Gres"] считается плохой практикой использовать на странице домнные объекты, вместо них используются DTO и лучше и удобнее, чтобы это был 1 DTO[/quote]

то есть Контроллер вообще не общается с sObjects (доменные объекты, БД) напрямую? он работает только с каким то промежуточным объектом? а что это дает?

ну как что: reusability. а потом, тестить контроллер можно вообще без создания даже тестовых данных, так получается? а если этот DTO вообще один на всех... очень интересно... 


(удалено)

(удалено)

Den Brown
Gres
считается плохой практикой использовать на странице домнные объекты, вместо них используются DTO и лучше и удобнее, чтобы это был 1 DTO

то есть Контроллер вообще не общается с sObjects (доменные объекты, БД) напрямую? он работает только с каким то промежуточным объектом? а что это дает?

ну как что: reusability. а потом, тестить контроллер можно вообще без создания даже тестовых данных, так получается? а если этот DTO вообще один на всех... очень интересно...

И не только это. В sObject нельзя добавиться свои методы, а рано или поздно это сделать будет надо и начнуться костыли.

[quote="Den Brown"][quote="Gres"] считается плохой практикой использовать на странице домнные объекты, вместо них используются DTO и лучше и удобнее, чтобы это был 1 DTO[/quote]

то есть Контроллер вообще не общается с sObjects (доменные объекты, БД) напрямую? он работает только с каким то промежуточным объектом? а что это дает?

ну как что: reusability. а потом, тестить контроллер можно вообще без создания даже тестовых данных, так получается? а если этот DTO вообще один на всех... очень интересно...[/quote]

И не только это. В sObject нельзя добавиться свои методы, а рано или поздно это сделать будет надо и начнуться костыли. 

Mike V
В sObject нельзя добавиться свои методы, а рано или поздно это сделать будет надо

похоже, вот это самое главное в истории про доменные объекты...

то есть какие-то "базовые", часто востребованные операции не выводятся в сервис классы (и сервис слой), и закладываются в "непосредственной" близости от sObject, в доменном объекте...

[quote="Mike V"]В sObject нельзя добавиться свои методы, а рано или поздно это сделать будет надо[/quote]

похоже, вот это самое главное в истории про доменные объекты...

то есть какие-то "базовые", часто востребованные операции не выводятся в сервис классы (и сервис слой), и закладываются в "непосредственной" близости от sObject, в доменном объекте...

Domain Object != Data Transfer Object

Domain Object != Data Transfer Object

Gres
Domain Object != Data Transfer Object

Gres, дай простой пример:

вот это кастомный sObject,

вот это его доменный класс\объект,

а вот это, дети, Data Transfer Object, который использует дату из того самого sObject

[quote="Gres"]Domain Object != Data Transfer Object[/quote]

Gres, дай простой пример:

вот это кастомный sObject,

вот это его доменный класс\объект,

а вот это, дети,  Data Transfer Object, который использует дату из того самого sObject
http://force-code.com/unit-testing-tips-tricks-part-1/

Den Brown
Gres, дай простой пример:

http://stackoverflow.com/questions/6154311/what-is-the-difference-between-domain-objects-pocos-and-entities
Domain Object - объект, описывающий к-л бизнесс модель и определяющий ее поведение
Data Transfer Object - объект, предоставляющий обертку над к-л моделью, для удобства работы со связанными данными.

[quote="Den Brown"]Gres, дай простой пример:[/quote]
http://stackoverflow.com/questions/6154311/what-is-the-difference-between-domain-objects-pocos-and-entities
Domain Object - объект, описывающий к-л бизнесс модель и определяющий ее поведение
Data Transfer Object - объект, предоставляющий обертку над к-л моделью, для удобства работы со связанными данными.