Você está na página 1de 37

?

   

     


?    

     


             
    !"
  #$ %&&% Y
Para que testar?
£ =  
     
[             

£  
    
     
   
   
[          

£ ‰                


!"  #$ %   =     
&''()      * +

4
  !   
'    (
£ Todos sabem: devem ser escritos;
£ Poucos o fazem, e por quê não ?
[ Îstou com muita pressa
£ as isto cria um círculo vicioso

›  

 
›  

 

›    ›
 

£ Como quebrar este ciclo: criando um ambiente simples de


testes. Depois de fazer os primeiros testes, o hábito vem para X
ficar.
Ä que são ferramentas para
testes automáticos?
£ ‰ 
     

      
      , , , !
$" -.     
   )/    
   

£ 0       


V
R nit: Ä que é?
£ R   !1 2#   
   "     
 
R
[ 345      
    )   )  ‰  )  
       
6     -.)  $  -.)-.)   
       
[ 37 "    - 
 8  .
8         -   
  .0 7  " )‰1
39 
§
R nit: Para que serve?
£ !4 #    R
£     : ;2- 
  <4.$/
>- > ?, 
4  ,.
£ ? 
[ 3 "      
[ 3      
£ R        
    
[ 4 
          
[ @/)    
£ ‰ "  7

º
Cpp nit
£     AA R  
-  B  .
/ CC    


£ 3 *      <6D 


   "    
   )   
      

'
Como usar
) *Como
) *
£       1 2   
class SuaClasseTest extends junit.framework.TestCase {...}
£ 4  """-
.     
      <""-.   
‰  
public boolean equals( Äbject o) { ... }
‰    
public void testÎquals() {...}
£ ‰       -.)   E 
       
£ ‰       1-.)   
      )
  ) 

l
R nit: Como usar
£   <""-.      """-.
£ E      
  $  -  $  )  8 .)
   - ;  .)
  @ @ -  .
  ‰-  )    .)
-.)
£ $" 
public class CoisaTest extends TestCase {
// construtor padrão omitido
private Coisa coisa;
public void set p() {
coisa = new Coisa(" Bit");
}
public void testToString() {
assertÎquals("< coisa> Bit</ coisa>", coisa.toString());
} È
}
Como funciona
) *Como
) *
£   8    
  1 2   
£           
£ 4    <<<-.)"   
&     -.  
F       <<<-.
G     1-.
£      "    
 <<<-.E   
£ 3  7  E      
set p()
       
 <<<-.
£ 6   terminar)falhar   exceção
 HHH-.
Y

tearDown()
R nit: Îxemplo
package junitdemo;
import java. io.*;
public class Text tils {
public static String removeWhiteSpaces( String text)
throws IÄÎxception {
StringReader reader = new StringReader( text);
StringBuffer buffer = new StringBuffer( text. length());
int c;
while( (c = reader. read()) != -1) {
if (c == ' '|| c == '\ n'|| c == '\ r'|| c == '\ f'|| c == '\ t') {
/* não faz nada */
}
else {
buffer. append(( char) c);
}
}
return buffer.toString();
}
} YY
R nit: Îxemplo
m test case para a classe
package junitdemo;
import junit. framework.*;
import java. io. IÄÎxception;
public class Text tilsTest extends TestCase {
public Text tilsTest( String name) {
super( name);
}
public void testRemoveWhiteSpaces()
throws IÄÎxception {
String testString = "one, ( two | three+) , "+"((( four+ |\ t five)?\ n \n, six?";
String expectedString = "one,( two| three+)"+",((( four+| five)?, six?";
String results = Text tils. removeWhiteSpaces( testString);
assertÎquals( expectedString, results);
}
}
Y4
    !  
) 
®include ³Test tils.h´
®include <cppunit/TestCase.h>
®include <cppunit/TestAssert.h>
using namespace std;
using namespace cppDemo;
class Text tilsTest: public Cpp nit::TestCase {
public:
Text tilsTest ( std::string name ) : Cpp nit::TestCase( name ) {}
void testRemoveWhiteSpaces () {
string testString ("one, ( two | three+), ((( four+ |\ t five)?\ n \n, six? ");
string expectedString ("one,( two| three+),((( four+| five)?, six? ");
string results = Text tils.removeWhiteSpaces( testString);
CPP IT_ASSÎRT_Î AL (expectedString, results);
}
YX
}
fail: Teste situações de falha
£ Ü         /    
    
[ 6  -.   /
[  "7         
 
£ $"
public void testÎntityotFoundÎxception() {
resetÎntityTable(); // não há entidades para resolver!
try {
// A chamada do método a seguir deve provocar uma exceção!
ParameterÎntityTag tag = parser.resolveÎntity(" bogus");
fail(" Deveria ter causado ÎntityotFoundÎxception!");
}
catch (ÎntityotFoundÎxception e) {
// sucesso: a exceção ocorreu conforme esperado
}
}
£ ?/           44 @5 I?35D- 
.YV
R nit: Fixtures
£ ‰    E     
[ 5E    -.  *    1-.-   .
public class AttributeÎnumerationTest extends TestCase {
String testString;
String[] testArray;
AttributeÎnumeration testÎnum;
public void set p() {
testString = "( alpha| beta| gamma)";
testArray = new String[]{" alpha", "beta", "gamma"};
testÎnum = new AttributeÎnumeration( testArray);
}
public void testGetames() {
assertÎquals( testÎnum. getames(), testArray);
}
public void testToString() {
assertÎquals( testÎnum. toString(), testString);
}
(...) Y§
£ $"   R nit -"    
 .       <6D
-J" .    
KL6 "4      

 )   
) *? +  
£ 4 "  )   / 
  )   ?" 
£        1   
)    
£ $" 
class Text tilsTest : public Cpp nit:: TestFixture {
(...)
protected:
void set p() { ...}
void tearDown() { ... }
}


R nit: A Classe TestSuite
£ 4 "       6    -  .
     
£ 4   -    .
[     ‰    % 
public static Test suite() {
return new TestSuite( SuaClasseTest.class);
}
[   3        
public class AllTests {
public static Test suite() {
TestSuite testSuite = new TestSuite(" Roda tudo");
testSuite.addTest( pacote.AllTests.suite());
testSuite.addTest( inhaClasseTest.suite());
testSuite.addTest( SuaClasseTest.suite());
return testSuite;
} Y'
}
) * , 
£ 4    F    
Cpp nit::TestSuite suite;
suite.addTest( new Cpp nit::TestCaller<omeDaSuaClasseDeTeste>(
³oomeDoSeuTeste",
&SuaClasseDeTeste::seuetodoDeTeste)); suite.addTest (
ÄutraClasseDeTeste::suite() );
£     )   R  )   M )
             
    
public:
static Cpp nit::Test *suite() {
Cpp nit::TestSuite *suiteÄfTests = new
Cpp nit::TestSuite("omeDoSeuTeste" );
suiteÄfTests->addTest (...)
return suiteÄfTests;
} Yl
R nit: como executar
se a interface de texto
java -cp junit.jar junit.textui.TestRunner
junitdemo.Text tilsTest
Äu use a interface gráfica
java -cp junit.jar junit.swingui.TestRunner
junitdemo.Text tilsTest
se Ant <junit>
Äu forneça um main():
Ô 
    
    
      YÈ
) *!   + ! 
£     " 
®include <cppunit/ui/text/TestRunner.h>
®include "SeuTeste.h"
int main( int argc, char **argv) {
Cpp nit::Text i::TestRunner runner;
runner.addTest( ÎxampleTestCase::suite() );
runner.addTest( ComplexumberTest::suite() );
runner.run();
return 0;
}
£ /   7 
 6?=    
      7 

4
Afirmações do RSDK 1.4
(assertions)
£ ‰ " 7     
 
      

[ @ %/assert
[ $" assert i ==  : "Îrro: i != ";
[ 37      
-  E   
   / )  E  
  
   
.
[           
 
   -  .
[ @       
  

[ 4   3   $   /
£ 37         RF‰:&N'
[ Ü      % &N
> javac -source 1.4 Classe.java
[ 4" ) / 7 -    . 4Y
> java -ea Classe
R nit vs. afirmações
£ 37  RF‰:&N        

[ 4       
   

if (i% 3 == 0) {
doThis();
} else if (i% 3 == 1) {
doThat();
} else {
assert i% 3 ==  : "Îrro interno!";
}
[ 3   $         "7  
R 
£ 37  R        -   .
[ @  B       -   
        .
£ 37  RF‰:&NR      
[ R       
[      / 
     44
Limitações do R nit
£ 3        
[ 6        
    R  
[     2
% 
-O.
£ ‰  7   
[ 5      

 
[      2
%
 
  
      
            4X
      
£ ‰     "    R 
)  -*
Testes de Performance
£       
    R  "   
-/ CC11121 .
£  
[ $"          
[    " "    /
"         
£ D  
[ $"      M     7 
     
[ E     
   
  7        %
 
[          
 4V

£ / 
R nitPerf:
Testes de Performance
import com.clarkware.junitperf.*;
import junit. framework.*;
public class ÎxampleLoadTest extends TestCase {
public ÎxampleLoadTest( String name) {
super( name);
}
public static Test suite() {
Timer timer = new ConstantTimer( 1000);
int users = 10;
int iters = 10;
long maxÎlapsedTime = 0000;
Test test = new ÎxampleTestCase("testÄneSecondResp");
Test loadTest = new LoadTest( test, users, iters, timer);
Test timedTest = new TimedTest( loadTest, maxÎlapsedTime);
TestSuite suite = new TestSuite();
suite. addTest( timedTest);
return suite;
}
public static void main( String args[]) { 4§
junit. textui. TestRunner. run(ÎxampleLoadTest.suite());
}
Reter:
Testes de Stress
£    %   
   
[ ‰ 
   )  
[        

7 9)   ? 4)  R)
  )  )  4)   
  )  7 -R  .
[ >
     
 
£ R6     
 
  /
      R  4
£ / CC2 / 
C  4º
Dependência de código
código--fonte
£ 4           
  
    
£  %          
 ›  
›    › 

 ›
› 
›
›    
 ›
 

£ ‰/    /   void imprime( )


  
£     /    
public void testImprime( ) {
Impressora imp = new Impressora();
imp.imprime( ); // void!
4'
assert???(???);
}
Stubs: objetos "impostores"
£ Ü * B  
%  
    
  

£ 3
;     *   
[ ;‰       3  -&.
[ $
  )3    5 ;-F.

4l
Dependência:
solução usando stubs

£ =    
[ B    
[ B  B    ) *
    *    
   4È

; )    )   9)


/1
Dependências de servidores
£ stubs    
[ Ü       
         7
[  "      
  
[   7  %    +
DB nit"    R    7 R;
/ CC    

R nitÎÎ"    R    7 RF$$
/ CC    

£ proxies   
[   
        
 
[ ‰    %  X

Cactus   
     
  
Cactus:
Testes de aplicações RÎÎ
£   1 2 %
   R2 
 7   E
    RF$$
[     9-
   .
]Cactus estende o R nit[ $R;-6 . -01.
  
Îxecução dos testes é realizada de forma idêntica
TestCases são construídos herdando de uma   de
junit.framework.TestCase (Îxemplo: ServletTestCase)

XY
Cactus:
Testes de aplicações RÎÎ
£     
      9   
  
[          R     
         
    R 
[        "O-‰ 8 )
R‰48  ? 8 .
R    7 P 4 "O
4 "O    P 4R    

 


Y !
""" V 
   4 X § """
     
       

l '
È """ º  X4
Testes de interface em
servidores Web
£          
   
[ 0  
P 6D <6D  
   "    
[ 0        
              
,"%  ,
£ ‰  7 -"  7  R  .
[ ttp nit Servlet ni 
     6P 6D

[ RWeb -   R<   P   .
        
<6D XX
    R  
   <6D
[ L nit: "         <6D
Concluindo
£ 4       R  

 /)    )?  )9 /) 
£      
[ 4
[ 8   

[ 8    
[  
 
[ D  
£ 0      
          E
[    )  
  
[   /  ) E  *
[    )  
E
XV
,  
[1] Slides de elder da Rocha: Implementando etreme
Programming em Rava (http://www.argonavis.com.br).
[] Slides do Professor Alfredo Goldman
(http://grenoble.ime.usp.br/~gold/temp/xp/)
[3] 8/P
/ 1@/  D 2R   
< 4

9O)F''F$"    
3 )R  ) )R  4)R6 P     
      <4
[4] R )3 )P2 < 4


5 )3 %9 O)F''&  " 
  
    
[5] 3/  S 6    
   %% 
[6] : ;2)$/>R    5 
 
 1 
  -R    .3 R   X§
/ 
[7] 3O‰/R  ; 4  R9 )
,  
[8] 8  : )  
 /
 / P    
6 )F''F
/ CC111    C  C  C  
/

/ 3PTUVN' 6   
   
> 5  
 B     
[9] 62 )?)
$ %  
1 /6 2
 
/ CC 2   
 C C 2  
           
    /, 2  ,
[10] 992  C O<44 &6 )4 
55> 5
/ CC    C112C"C"'''&CW   
       
,  % ,  
  
   > 5  
  Xº
[11] ‰ ?) 
R;3     ? 
F''&       %    2
,  
[1] 6 ? 18 
 
 /
 
 " 
 3 %9 O)F'''
N- 
  .    R  
[13] 3/R6  S 6 ?   
"
[14] 622)R  4  ?   
" 
[15]    2 2
-/ CC  
 C  C  .

X'