1

Тема: TDD

Хтось пробував TDD. Бо воно в мене іноді виходить, тоді я дуже щасливий, але частіше ну взагалі ніяк не йде, я забиваю і пишу код без тестів.

2

Re: TDD

А ще особливо цікаво як ви ізолюєте наприклад всілякі веб-сервіси?

3

Re: TDD

http://habrahabr.ru/post/62958/
http://en.wikipedia.org/wiki/Behavior-d … evelopment

пишу ukrcms використовую bdd
Ось приклад як я тестив встановлення системи:

@Install\Main
Feature: Check installer

  Scenario Outline: : Check installation
    Given I check <type> installation of package "blog-pack-1.1.zip"
    Given I am on "/install/install.php"
    Then I should see "Встановлення UkrCms"

Досить зручно. Підніметься гітахб можете покопати.

У своїх бібліотеках теж використовую цю систему. Дуже часто бувають моменти коли без тестів ніяк ;)

Подякували: Replace, bunyk2

4

Re: TDD

А ще особливо цікаво як ви ізолюєте наприклад всілякі веб-сервіси?

Розкажіть детально в чому проблеми ;))

5

Re: TDD

Круть, дякую.

Ще знайшов отаку книжку.

Починається вона з такого тесту:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://localhost:8000')

assert 'Django' in browser.title

Тому що тести треба писати ще до того як ми напишемо хоч рядок коду. :)

6

Re: TDD

funivan написав:

Розкажіть детально в чому проблеми ;))

Клієнт каже що деякий Azure REST API, раз на вихідних видає Connection refused (TCP пакет з бітом RST). Я не бачив. Я спробував в тесті пропатчити бібліотеку з сокетами аби зімітувати цю помилку, але інтелект поки що не дозволяє, хоча знаю що це можливо.

7

Re: TDD

Тому що тести треба писати ще до того як ми напишемо хоч рядок коду. :)

моя думка: це все відносно. Для чого писати тест який я знаю що він уже провалиться, я хочу написати код і його тестити. Це звісно холівар але все таки у мене переважно так: я пишу код, дальше тест. Якщо я пишу якусь складну логіку яку ще не знаю як реалізувати тоді я пишу тест і дальше код))

Клієнт каже що деякий Azure REST API, раз на вихідних видає Connection refused (TCP пакет з бітом RST). Я не бачив. Я спробував в тесті пропатчити бібліотеку з сокетами аби зімітувати цю помилку, але інтелект поки що не дозволяє, хоча знаю що це можливо.

Користуйтесь логером. Можна відслідковувати request & response і на основі цих даних зрозуміти в чому глюк.

Писати тести для Azure REST API думаю не потрібно а от для своєї програми треба. Отже необхідно емулювати в тестах деякі відповіді які має віддавати Azure REST API ;)

8

Re: TDD

funivan написав:

моя думка: це все відносно. Для чого писати тест який я знаю що він уже провалиться, я хочу написати код і його тестити. Це звісно холівар але все таки у мене переважно так: я пишу код, дальше тест. Якщо я пишу якусь складну логіку яку ще не знаю як реалізувати тоді я пишу тест і дальше код))

Дивно, в мене навпаки, для простого коду я можу зразу написати тест, а для складної логіки - звідки мені знати що і як тестити якщо я ще не написав те що треба тестити?

funivan написав:

Користуйтесь логером. Можна відслідковувати request & response і на основі цих даних зрозуміти в чому глюк.

Глюк відловлений задокументований і зрозумілий. Задача - створити в тестах умови за яких він відтворюється.

funivan написав:

Писати тести для Azure REST API думаю не потрібно а от для своєї програми треба. Отже необхідно емулювати в тестах деякі відповіді які має віддавати Azure REST API ;)

Так от в тому й суть, що відповідь земулювати не можу, тому що відповідь - це Exception глибоко з бібліотеки socket.

9

Re: TDD

Дивно, в мене навпаки, для простого коду я можу зразу написати тест, а для складної логіки - звідки мені знати що і як тестити якщо я ще не написав те що треба тестити?

У вас є логіки. Це саме головне. Немає коду немає нічого але ви знаєте що у вас має бути на виході. (Результат, обробка дія ..... )

Ось і пишете код як він має використовувати бібліотеку чи щось інше. Тобо на даному етапі у вас є варіант як буде використовуватись ваш код але немає реально вашої бібліотеки.

Можливо трохи заплутано пояснив. Можете написати складну логіку яку не знаєте як реалізувати я підкажу як написати тест ;)

Про Azure REST API я напишу як би я це робив на рнр

 class AzureDemo {

    public function getResult() {
      throw new \Exception('error 25');
    }
  }


  class AppDemo extends AzureDemo {

    public function run() {
      $this->getResult();
    }
  }


  # test function goes here
  function () {
    $app = new AppDemo();
    $app->run();
  }

В даному випадку у вас тест провалиться так як кидається ексепшин. Ось і маєте приблизно робочу логіку. У тестовій функції можете робити все що вам треба і як дальше боротись з цим ексепшином у своїй програмі.