Как тестировать зачёт аванса

Продолжить обсуждение из Публикация на Хабре от SilverBulleters и XDrivenDevelopers:

Начнём потихоньку в отдельной треде, чтобы не захламлять тред про публикации:

Первое - для того чтобы понять как тестировать подобное я использую переформатирование задачи в формат BDD. Когда начал писать - сразу стало понятно: что-то не так с постановкой :wink: - при поступлении денег от контрагента счет учета наверное 62.02 - авансы полученные, 60.02 - аванс выданные, тогда откуда возникает понятие долг и т.д.

Напишу как будто это покупки и счета учета 62.*

Функционал: Поступление оплаты по существующим договорам и зачёт аванса контрагента

Как <УказатьРольЗапуска> (Разработчик, Администратор, Бухгалтер, ????)
Я Хочу: чтобы чтобы при фиксации оплаты от Контрагента происходило распределение поступившей суммы по договорам, на котором существует долг
     И: происходила фиксация оплаты в виде аванса, если долг отсутствует

Контекст: Конфигурация Бухгалтерия 3.0 (Такси)
 И: существует "тестовый Контрагент"
 И: "тестовый договор Контрагента 1" с датой договора 02.01.2014
 И: "тестовый договор Контрагента 2" с датой договора 03.01.2014
 И: "Введена учетная политика" <я забыл как влияет учетная политика - там по моему ведение взаиморасчетов по счетам и по договорам>

Это так сказать секция - ПередТестом.

Теперь перейдем к сценариям:

Сценарий: Поступление суммы достаточной только для погашения существующего долга 
  Допустим: "тестовый Контрагент" имеет 2 покупки по 2-ум "тестовым договорам" на сумму 1000 и 300 рублей
  Когда: фиксируется оплата по  "тестовому Контрагенту" на сумму 1100 рублей
  Тогда: формируется проводка по счету 62.01 по "тестовый договор Контрагента 1" на сумму 1000
       И: формируется проводка по счету 62.01 по "тестовый договор Контрагента 2" на сумму 100
       И: на счете 62.01 по  "тестовый договор Контрагента 2"  остается долг в размере 200 рублей

А вот и аванс

Сценарий: Поступление суммы превышающей текущий долг по договорам поставщика
   Допустим: "тестовый Контрагент" имеет 2 покупки по 2-ум "тестовым договорам" на сумму 1000 и 300 рублей 
   Когда: фиксируется оплата по  "тестовому Контрагенту" на сумму 2000 рублей
  Тогда: формируется проводка по счету 62.01 по "тестовый договор Контрагента 1" на сумму 1000
       И: формируется проводка по счету 62.01 по "тестовый договор Контрагента 2" на сумму 300
       И: на счете 62.02  формируется проводка зачитывающая аванс в размере 700  рублей

Вот мне интересно - становится в таком случае понятней как написать тесты на такое ?

1 Симпатия

Это Женя должен был догадаться :wink: - что этот сценарий как “суп из топора” (я его специально до конца не стал расширять), думал подождать до завтра., тут же еще выплывает

  1. тест на создание контрагентов
  2. тест на работу с учетной политикой
  3. тест на параметры договора
  4. тест на фиксацию оплаты
  5. тест на отгрузку (чтобы долг возник в остатках)

и т.д.

:wink:

это BDD, а не TDD - здесь полезно увидеть все необходимые тесты затрагиваемые сценарием. Фактически это способ декомпозиции для последующей разработки через тестирования. Gherkin здесь просто для удобства понимания “Как тестировать”

Таким образом можно раскрутиться до покрытия тестами всей конфигурации :wink:
Я думал немного по-другому. Мы же тут проверяем наличие определенных проводок с определенными суммами документа, а тесты на поступление оплат, создания контрагентов и пр. сопутствующие у нас как бы уже должны быть в отдельных наборах. Поэтому здесь я предполагал примерно такой сценарий:

  1. загружаем все справочные данные через генератор данных (организацию, учетную политику, контрагент, договор);
  2. Добавляем долг контрагента проводками по его договорам с указанными суммами
  3. Создаем и проводим документ (наверное тоже через генератор данных?)
  4. Сверяем проводки с заранее заданными

Для начинающих можно вообще иметь полупустую базу, созданную на основе рабочей, где будет уже иметься начальные сведения об организации и учетной политике. Т.о. п.1 можно будет опустить. Знаю, что это неправильно и что надо рисовать все в чистом окружении, но таким образом можно снизить порог вхождения в тему тестирования.
Любому начинающему нельзя просто так взять и начать разрабатывать через тестирование, поэтому, как мне кажется, первой задаче должна быть задача по написанию тестов к новому или уже существующему функционалу. Не надо сразу пугать людей словами TDD :stuck_out_tongue_winking_eye:

1 Симпатия

@artbear ну таки что? Мы увидим кошерные тесты зачета аванса?

1 Симпатия

Извиняюсь за ошибки при постановки задачи.

  1. Счета “Расчеты с покупателями и заказчиками” - конечно же 62.01. Авансы соответственно - 62.02
  2. Оплата в бухгалтерии происходит с указанием конкретного договора покупателя, а суммы раскидываются на третьем субконто счета 62.01 “документ расчета с контрагентами” (реализация, само поступление на РС и т.д.)

В связи с этим тестовые сценарии немного видоизменяются
Дано (ПередТестом):

Функционал: Распределение поступающей оплаты по документам реализации и зачёт аванса контрагента

Как <УказатьРольЗапуска> (Разработчик, Администратор, Бухгалтер, ????)
Я Хочу: чтобы чтобы при фиксации оплаты от Контрагента происходило распределение поступившей суммы по документам реализации товаров и услуг, по которым существуют задолженности
     И: происходила фиксация оплаты в виде аванса, если долг отсутствует

Контекст: Конфигурация Бухгалтерия 3.0 (Такси)
 И: существует "тестовый Контрагент"
 И: "тестовый договор Контрагента"
 И: "тестовая услуга 1"
 И: Документ "Реализация товаров и услуг" № 1 от 01.01.2014  по контрагенту "тестовый Контрагент" по договору "тестовый договор Контрагента" по услуге "тестовая услуга 1" на сумму 1000 руб.
 И: Документ "Реализация товаров и услуг" № 2 от 02.01.2014 по договору "тестовый договор Контрагента" по услуге "тестовая услуга 1" на сумму 300 руб.
 И: "Введена учетная политика" <я забыл как влияет учетная политика - там по моему ведение взаиморасчетов по счетам и по договорам>

Тогда сценарий 1 выглядит так:

Сценарий: Поступление суммы достаточной только для погашения существующего долга 
  Допустим: "тестовый Контрагент" хочет оплатить 1100 руб.
  Когда: фиксируется оплата по  "тестовому Контрагенту" по договору "тестовый договор Контрагента"  на сумму 1100 рублей
  Тогда: формируется проводка по счету 62.01 на сумму 1000, где субконто3 заполнено как "Документ ""Реализация товаров и услуг"" № 1 от 01.01.2014 "
       И: формируется проводка по счету 62.01 на сумму 100, где субконто3 заполнено как "Документ ""Реализация товаров и услуг"" № 2 от 02.01.2014 "
       И: на счете 62.01  остается долг в размере 200 рублей по субконто3 "Документ ""Реализация товаров и услуг"" № 2 от 02.01.2014 "

Сценарий 2 (авансы):

Сценарий: Поступление суммы превышающей текущий долг покупателя
  Допустим: "тестовый Контрагент" хочет оплатить 2000 руб.
  Когда: фиксируется оплата по  "тестовому Контрагенту" по договору "тестовый договор Контрагента"  на сумму 200 рублей
  Тогда: формируется проводка по счету 62.01 на сумму 1000, где субконто3 заполнено как "Документ ""Реализация товаров и услуг"" № 1 от 01.01.2014 "
       И: формируется проводка по счету 62.01 на сумму 300, где субконто3 заполнено как "Документ ""Реализация товаров и услуг"" № 2 от 02.01.2014 "
       И: формируется проводка аванса по счету 62.02 на сумму 700, где субконто3 заполнено как сам документ поступления оплаты
1 Симпатия

вот сюда выкладываются примеры для типовой Бухгалтерии 3.0, пока конечно не слишком универсально но в прицнипе уже показывает “Как тестировать”

Я так понимаю, данные генерируете платформенным “сценарием тестирования”. А почему не генератор макета из xUnitFor1C взяли? Чтоб заодно и формочки потестировать?
На одной из моих старых конфигураций, где была немного нестандартная работа с формами и окнами, генерируемый сценарий не работал нормально. Надо было много и нудно править напильником

Какой генератор макета ты имеешь ввиду ? Вот этот ?

https://github.com/xDrivenDevelopment/xUnitFor1C/blob/develop/src/xddDataFixtureGen/ObjectModule.txt

если - да. то он не отвечает требованию к тестированию. Данные НЕ должны быть реальны, а должны обдумываться. Для тестов достаточно 3 контрагентов, 10 номенклатур и двух организаций ;-). Как показала практика лучше остановится на 2 секунды и создать их вручную и обезличено (типа Вентилятор бенатон)

Про формочки не понял.

В данном случае мы работаем по BDD.
Т.е. функционал системы “отражается” в каждой стадии разработки:

  1. в требованиях - т.е. фича написана на Gherkin
  2. в тестах (они идут до кода) - т.е. был сгенерирован шаблон теста по фиче
  3. в коде - наполнили тесты кодом и выполнили фичу
  4. в документации - (кроме фичи и тестов, которые уже читаемы) получили видеофайл (это ведь тоже документация) - как работает функционал, выкладываем его на вики, отправляем ссылку заказчику. Тут нам и помогает кнопконажималка.

А форум то жив :wink: @JohnyDeath - ты собственно этого и хотел

Пришла рассылка с форума. Сижу и радуюсь, что все заново воскрешается :wink:
Еще надо было на гитхабе ссылку оставлять не на гиттер, а на спец. раздел в этом форуме. Но и за переоткрытие форума отдельное спасибо. Уже пару раз заходил в поисках информации.

Я тоже ощущаю какой-то приятный позитив от чтения тем на данном форуме и от того, что он жив!

Так коллеги уехали по домам после Workshop’а - c помощью форума им всегда можно помочь в их нелегком труде