{"id":3177,"date":"2020-09-30T15:01:19","date_gmt":"2020-09-30T14:01:19","guid":{"rendered":"https:\/\/gdksoftware.com\/knowledgebase\/behavioural-driven-development-in-delphi"},"modified":"2022-01-11T10:05:42","modified_gmt":"2022-01-11T09:05:42","slug":"desenvolvimento-baseado-em-comprtamento-com-delphi","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi","title":{"rendered":"Desenvolvimento Baseado em Comportamento (BDD)"},"content":{"rendered":"<p>Para realizar testes em pequenas unidades de c\u00f3digo como por exemplo, procedures e fun\u00e7\u00f5es, n\u00f3s usamos testes unit\u00e1rios. Para testes mais abrangentes utilizamos desenvolvimento baseado em comportamento, conhecido por BDD (Behavioural Driven Development). Ao utilizar esta abordagem, os testes s\u00e3o escritos de forma que tanto os stakeholders como os desenvolvedores s\u00e3o capazes de compreender.<\/p>\n<p>Muita coisa t\u00eam sido escrita sobre BDD.<\/p>\n<p>Se procurarmos na internet por ferramentas de desenvolvimento baseado em BDD, encontraremos os links descritos a seguir:<\/p>\n<ol>\n<li><a href=\"https:\/\/www.slideshare.net\/RomanYankovsky\/behavior-driven-development-in-delphi\" target=\"_blank\" rel=\"noopener noreferrer\">This<\/a> (<a href=\"https:\/\/www.youtube.com\/watch?v=_U7DjaeqVHE\" target=\"_blank\" rel=\"noopener noreferrer\">YouTube<\/a> \u00e9 Roman apresentando os slides). Estes links s\u00e3o uma apresenta\u00e7\u00e3o do framework escrito por ele, chamado DelphiSpec. A apresenta\u00e7\u00e3o cobre somente o b\u00e1sico, mas mostra como se deve fazer<\/li>\n<li><a href=\"https:\/\/github.com\/RomanYankovsky\/DelphiSpec\" target=\"_blank\" rel=\"noopener noreferrer\">Library<\/a>: biblioteca Delphi para executar testes automatizados escritos em &#8220;plain language&#8221;<\/li>\n<li><a href=\"https:\/\/sourceforge.net\/projects\/dspec\/\" target=\"_blank\" rel=\"noopener noreferrer\">dSpec<\/a>: dSpec (beta status) \u00e9 um framework BDD para Delphi\/Pascal escrito como uma extens\u00e3o do DUnit<\/li>\n<\/ol>\n<p><strong>DelphiSpec<\/strong><\/p>\n<p>Implementar testes funcionais utilizando este framework \u00e9 relativamente f\u00e1cil. Embora DelphiSpec n\u00e3o est\u00e1 muito bem documentado, ele possui algumuns projetos de demonstra\u00e7\u00e3o que demostram as functionalidades existentes e o que pode ser feito com ela. N\u00f3s implementamos um conversor de n\u00fameros Romanos. O arquivo compactado em formato ZIP cont\u00e9m tanto o framework como o projeto de demonstra\u00e7\u00e3o.<\/p>\n<p>N\u00e3o \u00e9 dif\u00edcil de se acrescentar novos testes, mas tudo \u00e9 feito manualmente. Esta \u00e9 uma op\u00e7\u00e3o de melhoria para este framework. Al\u00e9m disso: este framework BDD pode muito bem ser utilizado para implementar projetos Delphi.<\/p>\n<p><a href=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2020\/06\/Demo_using_DelphiSpec.7z\">Demonstrando a utiliza\u00e7\u00e3o do DelphiSpec<\/a><\/p>\n<p><strong>dSpec<\/strong><\/p>\n<p>No in\u00edcio, dSpec n\u00e3o vai compilar. O motivo para isso \u00e9 que ele chama o construtor da classe on Self a partir de um m\u00e9todo da inst\u00e2ncia da classe. Esta era uma t\u00e9cnica utilizada antes do Delphi XE3. Assim, poder\u00edamos ter uma fun\u00e7\u00e3o na classe base um, que poderia ser chamada em objetos derivados de classes derivadas daquela classe base, para rapidamente criar objetos da classe derivada.<\/p>\n<p>Este framework \u00e9 utilizado de forma diferente. Ao inv\u00e9s de utilizar arquivos de funcionalidades, tudo \u00e9 escrito no pr\u00f3prio c\u00f3digo-fonte.<\/p>\n<p>&#8211; Em primeiro lugar, sua classe deve ser estendida da classe &#8220;TContext&#8221;. Esta classe do dSpec estende da classe &#8220;TTestCase&#8221; (que \u00e9 parte do DUnit)<\/p>\n<p>&#8211; Esta classe &#8220;TContext&#8221; possui uma propriedade chamada &#8220;Specify&#8221;. Este objeto possui diversas sobrecargas de m\u00e9todos que devolvem uma implementa\u00e7\u00e3o da interface &#8220;ISpecifier&#8221; que por sua vez cont\u00e9m um m\u00e9todo chamado &#8220;Should&#8221;.<\/p>\n<p>&#8211; Utilizando este framework, voc\u00ea pode escrever uma declara\u00e7\u00e3o mais ou menos assim::<\/p>\n<p>Specify.That(FFloat).Should.Be.GreaterThan(1).And_.Be.LessThan(2);<\/p>\n<p>Neste exemplo, o FFloat estava descrito no m\u00e9todo de setup. Todos os outros m\u00e9todos fazem parte do framework.<\/p>\n<p><strong>Conversor de n\u00fameros romanos<\/strong><\/p>\n<p>Ao incluir o DelphiSpec framework no projeto dar\u00e1 suporte a um n\u00famero limitado de fun\u00e7\u00f5es da linguagem Gherkin. Ele possui seu pr\u00f3prio validador para este fim.<\/p>\n<p><strong>Suporte<\/strong><\/p>\n<p>O suporte para isso poder\u00e1 ser enfadonho em Delphi. O framework DelphiSpec, que foi escrito em 2015 parece ser o melhor que temos e n\u00e3o nos parece possuir indica\u00e7\u00e3o de que futuros desenvolvimentos contemplar\u00e3o fazer o parse dos arquivos .Pas gerando testes de forma automatizada. Tudo tem que ser feito de forma manual. Com certeza seria poss\u00edvel de se implementar um parser para esta finalidade, mas desde que o trabalho no DelphiSpec aparentemente parou, novas funcionalidades precisar\u00e3o ser adicionadas a ele para que ele esteja totalmente atualizado.<\/p>\n<p><a href=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2020\/07\/FeatureParser.7z\">FeatureParser<\/a><\/p>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":["post-3177","knowledge","type-knowledge","status-publish","hentry","knowledge-category-arquivo-delphi","knowledge-category-desenvolvimento-de-software"],"acf":{"author":1655,"type_hero":"compact","hero_image":1975,"hero_image_position":"","hero_title":"BDD em Delphi","hero_content":"","hero_link":"","hero_show_h1":true},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Desenvolvimento Baseado em Comportamento (BDD) - GDK Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Desenvolvimento Baseado em Comportamento (BDD)\" \/>\n<meta property=\"og:description\" content=\"Para realizar testes em pequenas unidades de c\u00f3digo como por exemplo, procedures e fun\u00e7\u00f5es, n\u00f3s usamos testes unit\u00e1rios. Para testes mais abrangentes utilizamos desenvolvimento baseado em comportamento, conhecido por BDD (Behavioural Driven Development). Ao utilizar esta abordagem, os testes s\u00e3o escritos de forma que tanto os stakeholders como os desenvolvedores s\u00e3o capazes de compreender. Muita [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-11T09:05:42+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-baseado-em-comprtamento-com-delphi\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-baseado-em-comprtamento-com-delphi\",\"name\":\"Desenvolvimento Baseado em Comportamento (BDD) - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\"},\"datePublished\":\"2020-09-30T14:01:19+00:00\",\"dateModified\":\"2022-01-11T09:05:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-baseado-em-comprtamento-com-delphi#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-baseado-em-comprtamento-com-delphi\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-baseado-em-comprtamento-com-delphi#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Delphi\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/knowledgebase-category\\\/arquivo-delphi\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Desenvolvimento Baseado em Comportamento (BDD)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\",\"name\":\"GDK Software\",\"description\":\"Zet de stip op je horizon\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Desenvolvimento Baseado em Comportamento (BDD) - GDK Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi","og_locale":"pt_BR","og_type":"article","og_title":"Desenvolvimento Baseado em Comportamento (BDD)","og_description":"Para realizar testes em pequenas unidades de c\u00f3digo como por exemplo, procedures e fun\u00e7\u00f5es, n\u00f3s usamos testes unit\u00e1rios. Para testes mais abrangentes utilizamos desenvolvimento baseado em comportamento, conhecido por BDD (Behavioural Driven Development). Ao utilizar esta abordagem, os testes s\u00e3o escritos de forma que tanto os stakeholders como os desenvolvedores s\u00e3o capazes de compreender. Muita [&hellip;]","og_url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi","og_site_name":"GDK Software","article_modified_time":"2022-01-11T09:05:42+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi","url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi","name":"Desenvolvimento Baseado em Comportamento (BDD) - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/pt-br#website"},"datePublished":"2020-09-30T14:01:19+00:00","dateModified":"2022-01-11T09:05:42+00:00","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-baseado-em-comprtamento-com-delphi#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gdksoftware.com\/pt-br"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento"},{"@type":"ListItem","position":3,"name":"Delphi","item":"https:\/\/gdksoftware.com\/pt-br\/knowledgebase-category\/arquivo-delphi"},{"@type":"ListItem","position":4,"name":"Desenvolvimento Baseado em Comportamento (BDD)"}]},{"@type":"WebSite","@id":"https:\/\/gdksoftware.com\/pt-br#website","url":"https:\/\/gdksoftware.com\/pt-br","name":"GDK Software","description":"Zet de stip op je horizon","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gdksoftware.com\/pt-br?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"}]}},"_links":{"self":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/knowledge\/3177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/knowledge"}],"about":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/types\/knowledge"}],"acf:post":[{"embeddable":true,"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/team\/1655"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/media?parent=3177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}