SlideShare uma empresa Scribd logo
1 de 44
BDD com Rails
http://www.slideshare.net/caueguerra




    caue.guerra@caelum.com.br
OndeTrabalhar.com
Corretoras

             Comecei trabalhando
             com corretoras

             Planilhas que operavam
             diretamente na BOVESPA
Quero uma planilha que faça todo o
                           trabalho por mim.
                               Pra ontem!



Trader



         É pra já




                                     Recurso
Usuário pede
                        funcionalidade




Testes eram feitos em
produção.


                           Coding




                           Deploy
Acmus
public WaveformDisplay(Composite parent, int style) {

    
     super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);


    
    _parent = parent;


    
    _hbar = getHorizontalBar();

    
    _hbar.setMinimum(0);

    
    _hbar.addSelectionListener(new SelectionListener() {

    
    
    public void widgetDefaultSelected(SelectionEvent se) {

    
    
    
     widgetSelected(se);

    
    
    }


    
    
    public void widgetSelected(SelectionEvent se) {


     
     
          
          
               
               
                     updateXStart();
                     for (Waveform w : _wf) {
                                                                         Vou escrever testes, mas o

    
    
    
     
    w.redraw();                                   código está muito acoplado.


     
     
          
          
               
               
                     }
                     _timeBar.redraw();                                      Para isso precisarei

    
    
    }                                                          refatorar, mas não tenho

    
    });

    
    _hbar.setVisible(false);                                      segurança para refatorar se

    
    _vbar = getVerticalBar();
                                                                            eu não tenho testes.

    
    _vbar.setMinimum(0);

    
    _vbar.addSelectionListener(new SelectionListener() {

    
    
    public void widgetDefaultSelected(SelectionEvent se) {

    
    
    
     widgetSelected(se);

    
    
    }


    
    
    public void widgetSelected(SelectionEvent se) {

    
    
    
     updateYStart();

    
    
    
     for (Waveform w : _wf) {

    
    
    
     
    w.redraw();


     
     
          
          
               
               }
                     }
                                                                 Codigo muito feio não dava


     
     
          });
          _vbar.setVisible(false);                                       segurança

    
    _wf = new ArrayList<Waveform>();                            E se eu quebrar?

    
    _sampleArrays = new ArrayList<SampleArray>();


    
    setBackground(AcmusGraphics.WHITE);                     E ainda multiplicamos por 5


     
     
          GridLayout gl = new GridLayout();
          gl.marginHeight = 0;
                                                                   a cobertura. de 0.3% para


     
     
          gl.marginWidth = 0;
          gl.horizontalSpacing = 0;
                                                                           1.5%

    
    gl.verticalSpacing = 1;

    
    setLayout(gl);


    
    _timeBar = new TimeBar(this);

    
    GridData gridData = new GridData(GridData.FILL_HORIZONTAL);

    
    gridData.heightHint = _xBarHeight;

    
    _timeBar.setLayoutData(gridData);


    
    amplitude();

    }
public WaveformDisplay(Composite parent, int style) {

    
     super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);


    
    _parent = parent;


    
    _hbar = getHorizontalBar();

    
    _hbar.setMinimum(0);

    
    _hbar.addSelectionListener(new SelectionListener() {

    
    
    public void widgetDefaultSelected(SelectionEvent se) {

    
    
    
     widgetSelected(se);

    
    
    }


    
    
    public void widgetSelected(SelectionEvent se) {


     
     
          
          
               
               
                     updateXStart();
                     for (Waveform w : _wf) {
                                                                         Vou escrever testes, mas o

    
    
    
     
    w.redraw();                                   código está muito acoplado.


     
     
          
          
               
               
                     }
                     _timeBar.redraw();                                      Para isso precisarei

    
    
    }                                                          refatorar, mas não tenho

    
    });

    
    _hbar.setVisible(false);                                      segurança para refatorar se

    
    _vbar = getVerticalBar();
                                                                            eu não tenho testes.

    
    _vbar.setMinimum(0);

    
    _vbar.addSelectionListener(new SelectionListener() {

    
    
    public void widgetDefaultSelected(SelectionEvent se) {

    
    
    
     widgetSelected(se);

    
    
    }


    
    
    public void widgetSelected(SelectionEvent se) {

    
    
    
     updateYStart();

    
    
    
     for (Waveform w : _wf) {

    
    
    
     
    w.redraw();


     
     
          
          
               
               }
                     }
                                                                 Codigo muito feio não dava


     
     
          });
          _vbar.setVisible(false);                                       segurança

    
    _wf = new ArrayList<Waveform>();                            E se eu quebrar?

    
    _sampleArrays = new ArrayList<SampleArray>();


    
    setBackground(AcmusGraphics.WHITE);                     E ainda multiplicamos por 5


     
     
          GridLayout gl = new GridLayout();
          gl.marginHeight = 0;
                                                                   a cobertura. de 0.3% para


     
     
          gl.marginWidth = 0;
          gl.horizontalSpacing = 0;
                                                                           1.5%

    
    gl.verticalSpacing = 1;

    
    setLayout(gl);


    
    _timeBar = new TimeBar(this);

    
    GridData gridData = new GridData(GridData.FILL_HORIZONTAL);

    
    gridData.heightHint = _xBarHeight;

    
    _timeBar.setLayoutData(gridData);


    
    amplitude();

    }
@Test
public void testSimulateWallShocking() {
   vectors = new ArrayList<Vector>();

 vectors.add(new Vector(0.457495710997814f,
0.457495710997814f, 0.7624928516630234f));


 RayTracingSimulation rts = new
RayTracingSimulation(sectors, vectors, soundSourceCenter,
sphericalReceptorCenter, sphericalReceptorRadius,
soundSpeed, initialEnergy, mCoeficient, k);

 

 rts.simulate(bar);

 

 Iterator<Double> itr =
rts.getSphericalReceptorHistogram().keySet().iterator();


 Double expected = 0.02739239;

 assertTrue(Math.abs(expected - itr.next()) < EPS);

}
class TestaCalculadora
  def test_soma
   Calculadora.soma 1
   Calculadora.soma 2

  if Calculadora.total == 3
    puts "teste passando"
  else
    puts "teste falhou"
  end
 end
end
TestUnit
class TestaCalculadora          class TestaCalculadora < Test::Unit::TestCase
   def test_soma
     Calculadora.soma 1
                                  def test_soma
     Calculadora.soma 2             Calculadora.soma 1
                                    Calculadora.soma 2
    if Calculadora.total == 3
      puts "teste passando"
    else                            assert_equal 3, Calculadora.total
      puts "teste falhou"         end
    end
  end                           end
end
RSpec

                                                it "should be equal 3 when add 1 and 2" do
class TestaCalculadora < Test::Unit::TestCase
   def test_soma                                   Calculadora.soma 1
     Calculadora.soma 1                            Calculadora.soma 2
     Calculadora.soma 2

    assert_equal 3, Calculadora.total             Calculadora.total.should equal 3
  end
end                                             end
it "should be equal 3 when add 1 and 2" do   Scenario: Summing 1 and 2
    Calculadora.soma 1                         Given a calculator
    Calculadora.soma 2
                                               When I add 1
  Calculadora.total.should equal 3             And I add 2
end
                                               Then the result should be 3
it "should be equal 3 when add 1 and 2" do   Cenário: Somando 1 e 2
    Calculadora.soma 1                        Dado uma calculadora
    Calculadora.soma 2
                                              Quando eu somo 1
  Calculadora.total.should equal 3            E eu somo 2
end
                                              Então o resultado deve ser 3
OndeTrabalhar.com
   95.7% de cobertura - rcov
TDD / BDD ?
Teste




  Código




Refatoração
Vamos codar!
@Test
public void addAPrioritizableCard() {
	 given.thereIsAnUserNamed("sergio").and()
	 	 	 .thereIsAProjectNamed("IEs4Linux")
   	 	 	 .ownedBy("sergio").and()
	 	 	 .iAmLoggedInAs("sergio");
	 when.iOpenProjectPageOf("IEs4Linux").and()
	 	    .iOpenCardsPage().and()
   	   .iAddTheCard("support IE8")
	 	 	 	 .prioritizable()
	 	 	 	 .withDescription("Micro$oft must be supported");
	 then.theCard("support IE8").isPrioritizable();
}
E você?

Que desculpa ainda usa
  para não testar?
Produtividade ?
Digitação não é o gargalo!

Quanto tempo gasta
consultando API?
Perguntando pra colegas
duvidas? etc




 O que determina a
 produtividade hoje,
  é a qualidade de
       ontem
http://groups.google.com/group/dojo_sp/
Test all the fucking time
Think all the fucking time
Meu argumento final
Obrigado!

Mais conteúdo relacionado

Mais procurados

Mais procurados (7)

Codifique melhor
Codifique melhorCodifique melhor
Codifique melhor
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Codigo invocado com java.lang.invoke
Codigo invocado com java.lang.invokeCodigo invocado com java.lang.invoke
Codigo invocado com java.lang.invoke
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
 

Destaque

2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
2009, o ano do Ruby on Rails no Brasil - CaelumDay 20092009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
Caue Guerra
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
Caue Guerra
 
Model Horse Intro Slideshow
Model Horse Intro SlideshowModel Horse Intro Slideshow
Model Horse Intro Slideshow
guest61f11
 

Destaque (17)

2013 and gfi max
2013 and gfi max2013 and gfi max
2013 and gfi max
 
New To Social Media How To Contribute To Any Social Media Community
New To Social Media How To Contribute To Any Social Media CommunityNew To Social Media How To Contribute To Any Social Media Community
New To Social Media How To Contribute To Any Social Media Community
 
wrd&txt hacking
wrd&txt hackingwrd&txt hacking
wrd&txt hacking
 
Easyplrlove
EasyplrloveEasyplrlove
Easyplrlove
 
Profilering - Psychologie en Parktijk - Business experience 2013 - Coster & ...
Profilering - Psychologie en Parktijk - Business experience 2013  - Coster & ...Profilering - Psychologie en Parktijk - Business experience 2013  - Coster & ...
Profilering - Psychologie en Parktijk - Business experience 2013 - Coster & ...
 
Copia De My Family
Copia De My FamilyCopia De My Family
Copia De My Family
 
e-business
e-businesse-business
e-business
 
2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
2009, o ano do Ruby on Rails no Brasil - CaelumDay 20092009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009
 
How Small Business Owner Can Benefit From A Coach
How Small Business Owner Can Benefit From A CoachHow Small Business Owner Can Benefit From A Coach
How Small Business Owner Can Benefit From A Coach
 
Persuasion, Contagion and Ethics in Social Media - EU Counsil - Club of Venic...
Persuasion, Contagion and Ethics in Social Media - EU Counsil - Club of Venic...Persuasion, Contagion and Ethics in Social Media - EU Counsil - Club of Venic...
Persuasion, Contagion and Ethics in Social Media - EU Counsil - Club of Venic...
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
 
Managed services smb nation june 2011
Managed services   smb nation june 2011Managed services   smb nation june 2011
Managed services smb nation june 2011
 
JUnit - Selenium
JUnit - SeleniumJUnit - Selenium
JUnit - Selenium
 
KNSB verenigingsdag 2012 endnote
KNSB verenigingsdag 2012 endnoteKNSB verenigingsdag 2012 endnote
KNSB verenigingsdag 2012 endnote
 
Linkedin congres 2014 #lic2014 Coster & vd Blom
Linkedin congres 2014 #lic2014 Coster & vd BlomLinkedin congres 2014 #lic2014 Coster & vd Blom
Linkedin congres 2014 #lic2014 Coster & vd Blom
 
Model Horse Intro Slideshow
Model Horse Intro SlideshowModel Horse Intro Slideshow
Model Horse Intro Slideshow
 
Cross Platform Game Development with Rails
Cross Platform Game Development with RailsCross Platform Game Development with Rails
Cross Platform Game Development with Rails
 

Semelhante a BDD com Rails

Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
Afonso Gomes
 
Exercícios java 20 02
Exercícios java 20   02Exercícios java 20   02
Exercícios java 20 02
julyesersantos
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
Maurício Linhares
 

Semelhante a BDD com Rails (20)

Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
Exercícios java 20 02
Exercícios java 20   02Exercícios java 20   02
Exercícios java 20 02
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com Cactus
 
DOJO - TDD com C++
DOJO - TDD com C++DOJO - TDD com C++
DOJO - TDD com C++
 
TDD em C++
TDD em C++TDD em C++
TDD em C++
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Testes Unitários com GTest e Catch
Testes Unitários com GTest e CatchTestes Unitários com GTest e Catch
Testes Unitários com GTest e Catch
 
Javascript Ilegível
Javascript IlegívelJavascript Ilegível
Javascript Ilegível
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

BDD com Rails

  • 2. http://www.slideshare.net/caueguerra caue.guerra@caelum.com.br
  • 4. Corretoras Comecei trabalhando com corretoras Planilhas que operavam diretamente na BOVESPA
  • 5. Quero uma planilha que faça todo o trabalho por mim. Pra ontem! Trader É pra já Recurso
  • 6. Usuário pede funcionalidade Testes eram feitos em produção. Coding Deploy
  • 7.
  • 8.
  • 9.
  • 10. Acmus
  • 11. public WaveformDisplay(Composite parent, int style) { super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL); _parent = parent; _hbar = getHorizontalBar(); _hbar.setMinimum(0); _hbar.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent se) { widgetSelected(se); } public void widgetSelected(SelectionEvent se) { updateXStart(); for (Waveform w : _wf) { Vou escrever testes, mas o w.redraw(); código está muito acoplado. } _timeBar.redraw(); Para isso precisarei } refatorar, mas não tenho }); _hbar.setVisible(false); segurança para refatorar se _vbar = getVerticalBar(); eu não tenho testes. _vbar.setMinimum(0); _vbar.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent se) { widgetSelected(se); } public void widgetSelected(SelectionEvent se) { updateYStart(); for (Waveform w : _wf) { w.redraw(); } } Codigo muito feio não dava }); _vbar.setVisible(false); segurança _wf = new ArrayList<Waveform>(); E se eu quebrar? _sampleArrays = new ArrayList<SampleArray>(); setBackground(AcmusGraphics.WHITE); E ainda multiplicamos por 5 GridLayout gl = new GridLayout(); gl.marginHeight = 0; a cobertura. de 0.3% para gl.marginWidth = 0; gl.horizontalSpacing = 0; 1.5% gl.verticalSpacing = 1; setLayout(gl); _timeBar = new TimeBar(this); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.heightHint = _xBarHeight; _timeBar.setLayoutData(gridData); amplitude(); }
  • 12. public WaveformDisplay(Composite parent, int style) { super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL); _parent = parent; _hbar = getHorizontalBar(); _hbar.setMinimum(0); _hbar.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent se) { widgetSelected(se); } public void widgetSelected(SelectionEvent se) { updateXStart(); for (Waveform w : _wf) { Vou escrever testes, mas o w.redraw(); código está muito acoplado. } _timeBar.redraw(); Para isso precisarei } refatorar, mas não tenho }); _hbar.setVisible(false); segurança para refatorar se _vbar = getVerticalBar(); eu não tenho testes. _vbar.setMinimum(0); _vbar.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent se) { widgetSelected(se); } public void widgetSelected(SelectionEvent se) { updateYStart(); for (Waveform w : _wf) { w.redraw(); } } Codigo muito feio não dava }); _vbar.setVisible(false); segurança _wf = new ArrayList<Waveform>(); E se eu quebrar? _sampleArrays = new ArrayList<SampleArray>(); setBackground(AcmusGraphics.WHITE); E ainda multiplicamos por 5 GridLayout gl = new GridLayout(); gl.marginHeight = 0; a cobertura. de 0.3% para gl.marginWidth = 0; gl.horizontalSpacing = 0; 1.5% gl.verticalSpacing = 1; setLayout(gl); _timeBar = new TimeBar(this); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.heightHint = _xBarHeight; _timeBar.setLayoutData(gridData); amplitude(); }
  • 13. @Test public void testSimulateWallShocking() { vectors = new ArrayList<Vector>(); vectors.add(new Vector(0.457495710997814f, 0.457495710997814f, 0.7624928516630234f)); RayTracingSimulation rts = new RayTracingSimulation(sectors, vectors, soundSourceCenter, sphericalReceptorCenter, sphericalReceptorRadius, soundSpeed, initialEnergy, mCoeficient, k); rts.simulate(bar); Iterator<Double> itr = rts.getSphericalReceptorHistogram().keySet().iterator(); Double expected = 0.02739239; assertTrue(Math.abs(expected - itr.next()) < EPS); }
  • 14.
  • 15.
  • 16.
  • 17. class TestaCalculadora def test_soma Calculadora.soma 1 Calculadora.soma 2 if Calculadora.total == 3 puts "teste passando" else puts "teste falhou" end end end
  • 18. TestUnit class TestaCalculadora class TestaCalculadora < Test::Unit::TestCase def test_soma Calculadora.soma 1 def test_soma Calculadora.soma 2 Calculadora.soma 1 Calculadora.soma 2 if Calculadora.total == 3 puts "teste passando" else assert_equal 3, Calculadora.total puts "teste falhou" end end end end end
  • 19. RSpec it "should be equal 3 when add 1 and 2" do class TestaCalculadora < Test::Unit::TestCase def test_soma Calculadora.soma 1 Calculadora.soma 1 Calculadora.soma 2 Calculadora.soma 2 assert_equal 3, Calculadora.total Calculadora.total.should equal 3 end end end
  • 20. it "should be equal 3 when add 1 and 2" do Scenario: Summing 1 and 2 Calculadora.soma 1 Given a calculator Calculadora.soma 2 When I add 1 Calculadora.total.should equal 3 And I add 2 end Then the result should be 3
  • 21. it "should be equal 3 when add 1 and 2" do Cenário: Somando 1 e 2 Calculadora.soma 1 Dado uma calculadora Calculadora.soma 2 Quando eu somo 1 Calculadora.total.should equal 3 E eu somo 2 end Então o resultado deve ser 3
  • 22. OndeTrabalhar.com 95.7% de cobertura - rcov
  • 25.
  • 27.
  • 28. @Test public void addAPrioritizableCard() { given.thereIsAnUserNamed("sergio").and() .thereIsAProjectNamed("IEs4Linux") .ownedBy("sergio").and() .iAmLoggedInAs("sergio"); when.iOpenProjectPageOf("IEs4Linux").and() .iOpenCardsPage().and() .iAddTheCard("support IE8") .prioritizable() .withDescription("Micro$oft must be supported"); then.theCard("support IE8").isPrioritizable(); }
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. E você? Que desculpa ainda usa para não testar?
  • 35.
  • 36.
  • 38. Digitação não é o gargalo! Quanto tempo gasta consultando API? Perguntando pra colegas duvidas? etc O que determina a produtividade hoje, é a qualidade de ontem
  • 40. Test all the fucking time
  • 41. Think all the fucking time
  • 43.