Verstehen Sie die Codeabdeckung mit Rspec, dem Ruby on Rails-Testframework

Wenn ich einen Testfall schreibe, bekomme ich eine Geschichte darüber, wie viel Berichterstattung er abdeckt.

Was ist Codeabdeckung? Ich dachte, also werde ich es als mein Memorandum zusammenfassen.

Was ist Codeabdeckung?

Beim Softwaretest muss der gesamte Programmcode (interne Logik) getestet werden Es ist das Verhältnis (Abdeckungsrate) des getesteten Körperteils. Referenz

Typische Abdeckung

C0: Anweisungsabdeckung

Jede Anweisung wird mindestens einmal ausgeführt

C1: Zweigabdeckung

Für jede Beurteilungsbedingung mindestens einmal ausführen

C2: Zustandsdeckung

Die Authentizität in jeder bedingten Anweisung wird mindestens einmal ausgeführt

Kundencenter: Umfassende Zustandsabdeckung

Alle Kombinationen von Wahrheit und Falschheit, die in jede Bedingung gestellt werden können, werden ausgeführt

Schreiben Sie in der Tat Tests unter Berücksichtigung der Abdeckung mit Rspec

Ruby-Code zum Testen

sample.rb


module CodeCoverage
  class << self
  # main
  # @params [interger] x
  # @params [interger] y
  # @return [String]Zeichenfolgen, die sich je nach den Werten von x und y unterscheiden
  #
  #Das Argument geht nur von einer Interger aus
  def main(x, y)
    result = ''
    if x >= y || x % 2 == 0
      result << 'Prozess 1'
    else
      result << 'Prozess 2'
    end
    if x*y > 10
      result << 'Prozess 3'
    else
      result << 'Prozess 4'
    end
    return result
  end
  end
end

Testcode in Rspec geschrieben

Was ist Rspec

Eines der Frameworks zur Realisierung von TDD (Test Driven Development), einer der Entwicklungsmethoden von Ruby on Rails Referenz

Testcode Körper

RSpec.describe CodeCoverage do
  shared_examples 'Prozess 1 und Prozess 3 bestehen' do
    it 'Der Wortlaut von Prozess 1 und Prozess 3 wird zurückgegeben' do
      expect(subject).to eq 'Prozess 1 Prozess 3'
    end
  end
  shared_examples 'Prozess 1 und Prozess 4 bestehen' do
    it 'Der Wortlaut von Prozess 1 und Prozess 4 wird zurückgegeben' do
      expect(subject).to eq 'Prozess 1 Prozess 4'
    end
  end
  shared_examples 'Prozess 2 und Prozess 3 bestehen' do
    it 'Der Wortlaut von Prozess 2 und Prozess 3 wird zurückgegeben' do
      expect(subject).to eq 'Prozess 2 Prozess 3'
    end
  end
  shared_examples 'Prozess 2 und Prozess 4 bestehen' do
    it 'Der Wortlaut von Prozess 2 und Prozess 4 wird zurückgegeben' do
      expect(subject).to eq 'Prozess 2 Prozess 4'
    end
  end

  describe 'main' do
    subject { described_class.send(:main, x, y) }
      # C0:Anweisungsabdeckung
    #Schreiben Sie, um mindestens einmal mit wenigen Anweisungen auszuführen
      context 'Für C0' do
        context 'Gehen Sie Prozess 1 und Prozess 3 durch' do
          let(:x) { 11 }
          let(:y) { 1 }
          it_behaves_like 'Prozess 1 und Prozess 3 bestehen'
        end
        context 'Gehen Sie Prozess 2 und Prozess 4 durch' do
          let(:x) { 1 }
          let(:y) { 9 }
          it_behaves_like 'Prozess 2 und Prozess 4 bestehen'
        end
      end
      # C1:Filialabdeckung
      #Für jede Beurteilungsbedingung mindestens einmal ausführen
      context 'Für C1' do
        context 'Gehen Sie Prozess 1 und Prozess 3 durch' do
          let(:x) { 11 }
          let(:y) { 1 }
          it_behaves_like 'Prozess 1 und Prozess 3 bestehen'
        end
        context 'Gehen Sie Prozess 1 und Prozess 4 durch' do
          let(:x) { 3 }
          let(:y) { 2 }
          it_behaves_like 'Prozess 1 und Prozess 4 bestehen'
        end
        context 'Gehen Sie Prozess 2 und Prozess 3 durch' do
          let(:x) { 3 }
          let(:y) { 5 }
          it_behaves_like 'Prozess 2 und Prozess 3 bestehen'
        end
        context 'Gehen Sie Prozess 2 und Prozess 4 durch' do
          let(:x) { 1 }
          let(:y) { 4 }
          it_behaves_like 'Prozess 2 und Prozess 4 bestehen'
        end
      end
      
      # C2:Zustandsdeckung
      #Die Authentizität in jeder bedingten Anweisung wird mindestens einmal ausgeführt
      context 'Für C2' do
        context 'x>=y und x*y>10' do
          context 'Gehen Sie Prozess 1 und Prozess 3 durch' do
            let(:x) { 11 }
            let(:y) { 1 }
            it_behaves_like 'Prozess 1 und Prozess 3 bestehen'
          end
        end
        context 'x>=y und x*y<10' do
          context 'Gehen Sie Prozess 1 und Prozess 4 durch' do
            let(:x) { 3 }
            let(:y) { 2 }
            it_behaves_like 'Prozess 1 und Prozess 4 bestehen'
          end
        end
        context 'x<y und x sind gerade und x*y>10' do
          context 'Gehen Sie Prozess 1 und Prozess 3 durch' do
            let(:x) { 4 }
       let(:y) { 5 }
            it_behaves_like 'Prozess 1 und Prozess 3 bestehen'
          end
        end
        context 'x<y und x sind gerade und x*y<10' do
          context 'Gehen Sie Prozess 1 und Prozess 4 durch' do
            let(:x) { 2 }
            let(:y) { 3 }
            it_behaves_like 'Prozess 1 und Prozess 4 bestehen'
          end
        end
        context 'x<y und x sind ungerade und x*y>10' do
          context 'Gehen Sie Prozess 2 und Prozess 3 durch' do
            let(:x) { 3 }
            let(:y) { 5 }
            it_behaves_like 'Prozess 2 und Prozess 3 bestehen'
          end
        end
        context 'x<y und x sind ungerade und x*y<10' do
          context 'Gehen Sie Prozess 2 und Prozess 4 durch' do
            let(:x) { 1 }
            let(:y) { 4 }
            it_behaves_like 'Prozess 2 und Prozess 4 bestehen'
          end
        end
      end
    end
  end
end

Es ist leicht zu verstehen, wenn Sie es so schreiben. Wie viel Codeabdeckung erreicht wird, ist angemessen, aber bei der Arbeit liegt es an C1.

Recommended Posts

Verstehen Sie die Codeabdeckung mit Rspec, dem Ruby on Rails-Testframework
[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Controller-Test mit RSpec
[Ruby on Rails] Modelltest mit RSpec
Einführung in Rspec, ein Testframework für Ruby on Rails
[Schienen] Test mit RSpec
[Ruby on Rails] Bis zur Einführung von RSpec
Einführung in Rspec mit Ruby on Rails x Docker
Veröffentlichen Sie die mit Ruby on Rails erstellte App
Bestimmen Sie die aktuelle Seite mit Ruby on Rails
Führen Sie Ruby on Rails RSpec-Tests mit GitHub-Aktionen aus
[Rails] Testcode mit Rspec
[Ruby on Rails] Geben Sie automatisch eine Adresse aus einer Postleitzahl ein
Programmieren mit Ruby (unterwegs)
[Schienen] Machen wir einen Unit-Test mit Rspec!
[R Spec on Rails] So schreiben Sie Testcode für Anfänger von Anfängern
[Ruby on Rails] Codeprüfung mit Rubocop-Airbnb
Hinweise zur Verwendung von FCM mit Ruby on Rails
[Rails] Verfahren zum Verknüpfen von Datenbanken mit Ruby On Rails
[Ruby on Rails] Hochladen mehrerer Bilder mit Refile
Ich habe mit Ruby On Rails ein Portfolio erstellt
So beheben Sie Fehler, die beim Integrationstest "Ruby on Rails" auftreten
Ich verstehe Ruby on Rails-Parameter (mit Hanshin Tigers Poker-Faceman Atsushi Nomi)
[Ruby On Rails] Testfehler mit RSpec MySQL-Client ist nicht verbunden
[Ruby On Rails] Bei der Durchführung eines Modell-Unit-Tests mit RSpec mit FactoryBot tritt ein Fehler auf, da der externe Schlüssel nicht eingegeben wurde.
[Ruby] Grundlegende Codeliste. Behalten Sie die Grundlagen mit Beispielen
Ausführung des RSpec-Testcodes
[Ruby on Rails] Löschen Sie s3-Bilder mit Active Strage
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Testen Sie Nokogiri mit Rspec.
Ruby On Rails Association
[Rails] Stellen Sie denselben Code mit Controller-Aktionen zusammen
(Ruby on Rails6) Reflektiert den veröffentlichten Inhalt aus dem Formular
Site Map im RSS / Atom-Format mit Ruby on Rails erstellt
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
[Ruby on Rails] Nur den Benutzer, der Beiträge verfasst hat, dürfen bearbeiten
Ich habe versucht, das Ruby on Rails-Plugin mit vim-plug zu installieren
[Ruby on Rails] Zeigt den Seitentitel schnell im Browser an
<Punktinstallation> Einführung in Ruby on Rails5 Vergleich des Quellcodes
(Ruby on Rails6) Anzeige der Datenbank, die die ID der Datenbank erhalten hat
Alle Inhalte der Listenseite löschen [Ruby on Rails]
Ein Hinweis zum Seed-Feature von Ruby on Rails
[Ruby on Rails] Implementieren Sie die Anmeldefunktion von add_token_to_users mit API
[Hinweis] Über das Fizz_Buzz-Problem (Funktionsweise von Ruby on Rails)
Ruby on Rails Lernrekord -2020.10.03
Portfolioerstellung Ruby on Rails
Ruby on Rails Lernrekord -2020.10.04
[Ruby on Rails] Debuck (bindend.pry)
Ruby on Rails Lernrekord -2020.10.05