Posted By

gpupo on 11/10/10


Tagged

symfony util UnitTest


Versions (?)

Classe para cálculo de desconto progressivo e teste unitário Symfony


 / Published in: PHP
 

Uma classe e seu teste unitário

  1. <?php
  2.  
  3. class financeira
  4. {
  5. private $value, $original, $info;
  6.  
  7. public function __construct($value = 100)
  8. {
  9. $this->value = $this->original = $value;
  10. $this->info = array('log'=>$value,'operacao' => '');
  11. }
  12. private function addLog($x)
  13. {
  14. $this->info['log'] .= "\n" . $x;
  15. }
  16. private function addOperacao($x)
  17. {
  18. $this->info['operacao'] .= $x;
  19. $this->addLog($x);
  20. }
  21. public function getInfo($k = 'operacao')
  22. {
  23. return $this->info[$k];
  24. }
  25. public function setValue($x)
  26. {
  27. $this->original = $x;
  28. $this->resetValue();
  29. return $this;
  30. }
  31. public function getValue()
  32. {
  33. $this->addLog('=' . $this->value);
  34. return (float) $this->value;
  35. }
  36. public function resetValue()
  37. {
  38. $this->value = $this->original;
  39. $this->info['operacao'] = '';
  40. $this->info['log'] = '';
  41. return $this;
  42. }
  43.  
  44. private function percent($x, $v = NULL)
  45. {
  46. if(!isset($v))
  47. {
  48. $v = $this->value;
  49. }
  50. $r = ($v * $x) /100;
  51. $this->addOperacao('-' . $x . '%');
  52. return $r;
  53. }
  54. public function addDesconto($x)
  55. {
  56. $this->value -= $this->percent($x);
  57. }
  58. /*
  59.  * Calcula descontos progressivos como 10% + 20% + 5% a partir de um array
  60.  */
  61. public function addDescontoProgressivo(array $descontos)
  62. {
  63. foreach($descontos as $desconto)
  64. {
  65. $this->addDesconto($desconto);
  66. }
  67. return $this;
  68. }
  69.  
  70. public function getDesconto()
  71. {
  72. return $this->original - $this->value;
  73. }
  74.  
  75. public function getAlterador()
  76. {
  77. return ($this->getDesconto() * 100) / $this->original;
  78. }
  79.  
  80. /*
  81. * Calcula o numero multiplicador de desconto progressivo como 10% + 20% + 5% a partir de um array
  82. */
  83. public function getMultiplicadorDaProgressao(array $descontos)
  84. {
  85. $this->resetValue();
  86. foreach($descontos as $desconto)
  87. {
  88. $this->addDesconto($desconto);
  89. }
  90. return $this->getAlterador();
  91. }
  92.  
  93.  
  94. }
  95.  
  96.  
  97. // Teste unitário, salvo no arquivo financeiraTest.php
  98.  
  99.  
  100.  
  101. /**
  102.  *
  103.  * @author Gilmar Pupo <[email protected]>
  104.  *
  105.  * Testa as funcoes da classe financeira
  106.  */
  107.  
  108. require_once dirname(__FILE__).'/../bootstrap/unit.php';
  109. $t = new lime_test(25);
  110.  
  111. $v = new financeira(100);
  112. $v->addDesconto(10);
  113. $t->is( $v->getValue(),90 ,'adicionando 10% de Porcentagem:' . $v->getValue());
  114. $v->addDesconto(10);
  115. $t->is( $v->getValue(),81 ,'adicionando 10% de Porcentagem:' . $v->getValue());
  116.  
  117. $v->resetValue();
  118. $t->is( $v->getValue(),100 ,'reiniciando valores:' . $v->getValue());
  119.  
  120. $v->addDescontoProgressivo(array(10, 10));
  121. $t->is( $v->getValue(),81 ,'adicionando 10% + 10% de Porcentagem:' . $v->getValue());
  122.  
  123. $v->resetValue();
  124. $v->addDescontoProgressivo(array(30, 10, 5));
  125. $t->is( $v->getValue(),59.85 ,'adicionando 30% + 10% + 5% de desconto em 100:' . $v->getValue());
  126.  
  127. $t->diag('Testando métodos compactados');
  128.  
  129. $v->setValue(80)->addDescontoProgressivo(array(30, 10, 5));
  130. $t->is( $v->getValue(),47.88 ,'adicionando 30% + 10% + 5% de desconto em 80:' . $v->getValue());
  131.  
  132. $t->is( $v->setValue(50)
  133. ->addDescontoProgressivo(array(30, 10, 5))
  134. ->getValue()
  135. ,29.925 ,'adicionando 30% + 10% + 5% de desconto em 50:' . $v->getValue());
  136.  
  137. $t->diag('Obtendo dados informativos');
  138. $t->is( $v->setValue(100)
  139. ->addDescontoProgressivo(array(30, 10, 5))
  140. ->getDesconto()
  141. ,40.15 ,'acumulado de desconto foi de:' . $v->getDesconto());
  142. $t->is( $v->getAlterador(), 40.15, 'alterador:' . $v->getAlterador());
  143.  
  144. $t->is( $v->setValue(80)
  145. ->addDescontoProgressivo(array(30, 10, 5))
  146. ->getDesconto()
  147. ,32.12 ,'acumulado de desconto foi de:' . $v->getDesconto());
  148. $t->is( $v->getAlterador(), 40.15, 'alterador:' . $v->getAlterador());
  149.  
  150. $t->is( $v->setValue(50)
  151. ->addDescontoProgressivo(array(30, 10, 5))
  152. ->getDesconto()
  153. ,20.075 ,'acumulado de desconto foi de:' . $v->getDesconto());
  154. $t->is( $v->getAlterador(), 40.15, 'alterador:' . $v->getAlterador());
  155.  
  156.  
  157. $t->diag('Definindo multiplicador a partir de um array');
  158.  
  159. $y = new financeira();
  160.  
  161. $t->is( $i = $y->getMultiplicadorDaProgressao(array(30, 10, 10)) , 43.3, 'getMultiplicadorDaProgressao:' . $i);
  162. $t->isa_ok( $y->getInfo(), 'string', 'operacao:' . $y->getInfo());
  163. //echo $y->getInfo('log') . "\n";
  164.  
  165. $t->is( $i = $y->getMultiplicadorDaProgressao(array(20, 10, 10)) , 35.2, 'getMultiplicadorDaProgressao:' . $i);
  166. $t->isa_ok( $y->getInfo(), 'string', 'operacao:' . $y->getInfo());
  167. //echo $y->getInfo('log') . "\n";
  168.  
  169.  
  170. $t->is( $i = $y->getMultiplicadorDaProgressao(array(30, 10, 5)) , 40.15, 'getMultiplicadorDaProgressao:' . $i);
  171. $t->isa_ok( $y->getInfo(), 'string', 'operacao:' . $y->getInfo());
  172. //echo $y->getInfo('log') . "\n";
  173.  
  174.  
  175. $t->is($r = ((100 * $y->getMultiplicadorDaProgressao(array(30, 10, 5))) /100) , 40.15, $y->getInfo() . ':' . $r);
  176. $t->is($r = ((80 * $y->getMultiplicadorDaProgressao(array(30, 10, 5))) /100) , 32.12, $y->getInfo() . ':' . $r);
  177. $t->is($r = ((50 * $y->getMultiplicadorDaProgressao(array(30, 10, 5))) /100) , 20.075, $y->getInfo() . ':' . $r);
  178.  
  179.  
  180. $t->is($r = ((100 * $y->getMultiplicadorDaProgressao(array(30, 7, 5))) /100) , 38.155, $y->getInfo() . ':' . $r);
  181. $t->is($r = ((80 * $y->getMultiplicadorDaProgressao(array(30, 8, 5))) /100) , 31.056, $y->getInfo() . ':' . $r);
  182. $t->is($r = ((50 * $y->getMultiplicadorDaProgressao(array(20, 9, 20))) /100) , 20.88, $y->getInfo() . ':' . $r);

Report this snippet  

Comments

RSS Icon Subscribe to comments
Posted By: gpupo on November 10, 2010

Resultados dos testes:

gpupo@gpupo-laptop:~/wProjects/papel$ sf test:unit financeira 1..25 ok 1 - adicionando 10% de Porcentagem:90 ok 2 - adicionando 10% de Porcentagem:81 ok 3 - reiniciando valores:100 ok 4 - adicionando 10% + 10% de Porcentagem:81 ok 5 - adicionando 30% + 10% + 5% de desconto em 100:59.85

Testando métodos compactados

ok 6 - adicionando 30% + 10% + 5% de desconto em 80:47.88 ok 7 - adicionando 30% + 10% + 5% de desconto em 50:29.925

Obtendo dados informativos

ok 8 - acumulado de desconto foi de:40.15 ok 9 - alterador:40.15 ok 10 - acumulado de desconto foi de:32.12 ok 11 - alterador:40.15 ok 12 - acumulado de desconto foi de:20.075 ok 13 - alterador:40.15

Definindo multiplicador a partir de um array

ok 14 - getMultiplicadorDaProgressao:43.3 ok 15 - operacao:-30%-10%-10% ok 16 - getMultiplicadorDaProgressao:35.2 ok 17 - operacao:-20%-10%-10% ok 18 - getMultiplicadorDaProgressao:40.15 ok 19 - operacao:-30%-10%-5% ok 20 - -30%-10%-5%:40.15 ok 21 - -30%-10%-5%:32.12 ok 22 - -30%-10%-5%:20.075 ok 23 - -30%-7%-5%:38.155 ok 24 - -30%-8%-5%:31.056 ok 25 - -20%-9%-20%:20.88

Looks like everything went fine.

Posted By: gpupo on November 10, 2010

Resultados dos testes (correto)


gpupo@gpupo-laptop:~/wProjects/papel$ sf test:unit financeira
1..25
ok 1 - adicionando 10% de Porcentagem:90
ok 2 - adicionando 10% de Porcentagem:81
ok 3 - reiniciando valores:100
ok 4 - adicionando 10% + 10% de Porcentagem:81
ok 5 - adicionando 30% + 10% + 5% de desconto em 100:59.85
# Testando métodos compactados
ok 6 - adicionando 30% + 10% + 5% de desconto em 80:47.88
ok 7 - adicionando 30% + 10% + 5% de desconto em 50:29.925
# Obtendo dados informativos
ok 8 - acumulado de desconto foi de:40.15
ok 9 - alterador:40.15
ok 10 - acumulado de desconto foi de:32.12
ok 11 - alterador:40.15
ok 12 - acumulado de desconto foi de:20.075
ok 13 - alterador:40.15
# Definindo multiplicador a partir de um array
ok 14 - getMultiplicadorDaProgressao:43.3
ok 15 - operacao:-30%-10%-10%
ok 16 - getMultiplicadorDaProgressao:35.2
ok 17 - operacao:-20%-10%-10%
ok 18 - getMultiplicadorDaProgressao:40.15
ok 19 - operacao:-30%-10%-5%
ok 20 - -30%-10%-5%:40.15
ok 21 - -30%-10%-5%:32.12
ok 22 - -30%-10%-5%:20.075
ok 23 - -30%-7%-5%:38.155
ok 24 - -30%-8%-5%:31.056
ok 25 - -20%-9%-20%:20.88
# Looks like everything went fine.                      


You need to login to post a comment.