4 Stimmen

Was ist die beste Praxis, um Asserts in Ruby zu verwenden, aber nicht als Teil von Unit-Tests?

Ich möchte eine Behauptung verwenden, um einen Fehler innerhalb einer Rake-Aufgabe auszulösen.

the_index = items.index(some_item)
assert_not_nil the_index, "Lookup failed for the following item: " + some_item

Ich bekomme undefined method assert_not_nil . Kann ich die Assertions-Datei in meinen Rake-Task einbinden? Wie?

Ist dies ein bewährtes Verfahren, oder gibt es eine bessere Lösung?

Arbeiten in Ruby 1.9.2.

5voto

Simon Perepelitsa Punkte 19921

Sie können Assertions eigentlich überall verwenden, wo Sie wollen.

require "minitest/unit"
include MiniTest::Assertions # all assertions are in this module
refute_nil @ivar, "An instance variable should not be nil here!"

Aber warum sollten Sie das tun? Erheben Sie stattdessen selbst sinnvolle Ausnahmen.

3voto

Simon Perepelitsa Punkte 19921

Es gibt einen eingebauten Array#fetch Methode, die sich wie #[] aber löst einen IndexError aus, anstatt nil zurückzugeben, wenn das Element nicht gefunden wird. (Dasselbe gilt für Hash.) Ich verwende immer die erste Variante, wenn ich nicht erwarte, dass die Sammlung ein Element ausschließt.

a = [:foo, :bar]
a.fetch(0)   #=> :foo
a[4]         #=> nil
a.fetch(4)   #=> IndexError: index 4 outside of array bounds: -2...2

Und in den anderen Fällen sollten Sie selbst Ausnahmen machen, wie Bramha Ghosh vorschlägt:

raise "I don't expect this to be nil!" if element.nil?

Sie sollten dies jedoch nicht oft tun, sondern nur dann, wenn Sie wissen, dass Ihr Code in weiter Ferne scheitern wird, was die Fehlersuche mühsam macht.

1voto

Bramha Ghosh Punkte 6454

Gibt es einen besonderen Grund, warum Sie eine Assert verwenden möchten?

Warum nicht

raise IndexError, "Lookup failed for the following item: #{some_item}" unless items.include? some_item

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X