51 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Unit Tests
 | |
| localeTitle: Testes Unitários
 | |
| ---
 | |
| ## Testes Unitários
 | |
| 
 | |
| O teste unitário é um tipo de teste encontrado na parte inferior da pirâmide de teste de software. Isso envolve quebrar a base de código em partes menores (ou unidades) e testá-las isoladamente. Dependendo do tipo de linguagem de programação (ou paradigma), isso pode ser contra qualquer coisa que você defina como uma unidade, embora a prática mais comum seja contra funções.
 | |
| 
 | |
| ### Por que fazê-lo?
 | |
| 
 | |
| *   **Proteção** - Teste de unidade protege contra a introdução de bugs novos ou antigos para programação defensiva
 | |
| *   **Confiança** - Você pode adicionar alterações, reutilizar ou refatorar códigos (ambos muito comuns) e ter certeza de que não adicionou um bug
 | |
| *   **Documentação** - O teste de unidade documenta o comportamento e o fluxo de código, facilitando a compreensão de alguém novo no código
 | |
| *   **Isolation** - isola um módulo do recurso inteiro. Essa abordagem obriga você a pensar em um módulo por si só e perguntar qual é o seu trabalho?
 | |
| *   **Qualidade** - Como o teste de unidade força você a pensar e usar sua própria API, ele impõe interfaces e padrões bons / extensíveis. Pode indicar qualquer acoplamento ou complexidade excessiva que deva ser abordado. Código ruim geralmente é muito mais difícil de testar
 | |
| *   **Padrão da indústria** - O teste de unidade é uma disciplina comum nos dias de hoje e é um requisito para uma grande parte das empresas de software
 | |
| *   **Menos bugs** - Pesquisas substanciais sugerem que a aplicação de testes a uma aplicação pode reduzir a densidade de bugs de produção em 40% - 80%.
 | |
| 
 | |
| ### Exemplo (em Javascript)
 | |
| 
 | |
| Suponha que haja uma função escrita no arquivo **add.js**
 | |
| 
 | |
| ```javascript
 | |
| var add = function(number1, number2){ 
 | |
|   return number1 + number2; 
 | |
|  } 
 | |
| ```
 | |
| 
 | |
| Agora, a fim de escrever o teste unitário desta função em particular, podemos usar ferramentas de teste como o [mocha](http://mochajs.org/)
 | |
| 
 | |
| ```javascript
 | |
| const mocha = require('mocha') 
 | |
|  const chai = require('chai')  // It is an assertion library 
 | |
|  describe('Test to check add function', function(){ 
 | |
|   it('should add two numbers', function(){ 
 | |
|     (add(2,3)).should.equal(5)  //Checking that 2+3 should equal 5 using the given add function 
 | |
|   }); 
 | |
|  }); 
 | |
| ```
 | |
| 
 | |
| ### Desenvolvimento Orientado a Testes
 | |
| 
 | |
| O teste unitário é uma característica fundamental da abordagem de desenvolvimento orientado a testes (TDD) para o desenvolvimento de software. Nesta abordagem, o código para recursos ou funções específicas é escrito através do uso repetido de um ciclo muito curto. Primeiro, o desenvolvedor escreve um conjunto de testes unitários automatizados e garante que eles falhem inicialmente. Em seguida, o desenvolvedor implementa a quantidade mínima de código necessária para passar nos casos de teste. Uma vez que tenha sido validado que o código está se comportando conforme o esperado, o desenvolvedor volta atrás e refatora o código para aderir a qualquer padrão de codificação relevante.
 | |
| 
 | |
| ### Mais Informações
 | |
| 
 | |
| Martin Fowler em testes unitários: [martinfowler.com](https://www.martinfowler.com/bliki/UnitTest.html)
 | |
| 
 | |
| Robert Martin também conhecido como "Dr. Bob" em TDD: [butunclebob.com](http://www.butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd)
 | |
| 
 | |
| Eric Elliot em testes unitários e TDD: [Medium](https://medium.com/javascript-scene/5-common-misconceptions-about-tdd-unit-tests-863d5beb3ce9) |