Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Moja aplikacja uzyskuje dostęp do zdalnej bazy danych. Jak sprawnie przeprowadzić testy jednostkowe?

TL;DR:Użyj nulldb i klasy nadrzędnej obsługującej testy

Użyj nulldb podczas testowania, a rzeczywistej bazy danych w przeciwnym razie. Oto jak:

Najpierw umieść to w swoim pliku Gemfile:

group :development, :test do
  gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end

a następnie wykonaj zwykłą bundle install

Zdefiniuj klasę bazową dla wszystkich modeli znajdujących się w zewnętrznej bazie danych:

class ExternalModel < ActiveRecord::Base
  if Rails.app.test?
    establish_connection(:adapter => :nulldb)
  else
    establish_connection(:myapp)
  end

  def readonly?; true; end
end

Następnie wszystkie modele zewnętrzne dziedziczą po ExternalModel (powinienem był to zrobić od samego początku):

class ExternalUser < ExternalModel
  ...
end

Po uruchomieniu w środowisku testowym nie będzie próbował połączyć się z tabelą zewnętrzną. Oczywiście próby uzyskania dostępu do instancji ExternalUser zakończą się niepowodzeniem, ale możesz selektywnie nawiązać połączenie z zewnętrzną bazą danych podczas testowania integracji lub w przeciwnym razie skrótowe lub próbne odwołania do modelu zewnętrznego.

Co najważniejsze, wszystkie moje testy przebiegają teraz naprawdę szybko.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd połączenia JDBC:nierozpoznana strefa czasowa

  2. Spark SQL i MySQL- SaveMode.Overwrite nie wstawiając zmodyfikowanych danych

  3. MySQL:Znajdowanie wierszy, które nie biorą udziału w relacji

  4. Najszybszy sposób na importowanie dużego pliku CSV do MySql za pomocą MySql CLI

  5. Model CakePHP z datami między