Minitest before_all
Publicado em Developer
before_all minitest rails ruby
Estava precisando carregar uma planilha imensa para ser importada (utilizando a gem Spreadsheet) e me deparei com uma demora incômoda, pois no Minitest não existe um método before_all
como no Rspec, então resolvi dar uma investigada. O Minitest
tem um método chamado before_setup para ser utilizado com extensões, mas existem algumas situações com variáveis de instância de classes que eu preferi evitar.
Primeiro, vamos ver o código original:
Rodando os testes:
$ ruby spreadsheet_test.rb
Run options: --seed 33972
# Running:
document object id: 19838920
document object id: 22053520
document object id: 22957440
Finished in 1.455343s, 2.0614 runs/s, 2.0614 assertions/s.
3 runs, 3 assertions, 0 failures, 0 errors, 0 skips
Podemos ver que sempre são criados objetos diferentes em @doc
, apesar de utilizar o operador ||=
, ou seja, estamos fazendo um parse da planilha (que é bem grande) a cada vez que passamos por ali, criando um objeto novo. Se alterarmos para o before
utilizar um método de classe, que vai manter o estado com a varíavel de instância da classe, enviando como retorno, vai ficar interessante:
e rodarmos os testes novamente:
$ ruby spreadsheet_test.rb
Run options: --seed 57440
# Running:
document object id: 20499820
document object id: 20499820
document object id: 20499820
Finished in 1.228259s, 2.4425 runs/s, 2.4425 assertions/s.
3 runs, 3 assertions, 0 failures, 0 errors, 0 skips
Vamos ver que agora é sempre o mesmo objeto, o que nos economizou algum tempo rodando os testes e vai nos economizar mais ainda quando mais testes forem adicionados. Com os testes que até agora tenho no sistema real já ouve uma redução do tempo dos testes para 1/4 do tempo, o que é bem expressivo.
Comentários
Comentários fechados.
Sem nenhum comentário.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300