2011-11-24 11 views
5

Apparentemente non c'è il numero assert_false in Test :: Unità. Come lo aggiungeresti estendendo le asserzioni e aggiungendo il file config/initializers/assertions_helper.rb?Come estendere il test Ruby :: Unità per includere assert_false?

È questo il modo migliore per farlo? Non voglio modificare test/unit/assertions.rb.

A proposito, non penso che sia ridondante. Stavo usando assert_equal false, something_to_evaluate. Il problema con questo approccio è che è facile utilizzare accidentalmente assert false, something_to_evaluate. Questo fallirà sempre, non genera un errore o un avvertimento e invierà bug ai test.

+1

@B Sette, hai visto questo [link] (http://www.natontesting.com/2009/07/21/add-assert_false-to-rubys-testunit/)? –

+0

Quale collegamento? .... –

+1

http://www.natontesting.com/2009/07/21/add-assert_false-to-rubys-testunit/, il link di lavoro è un collegamento ipertestuale ma si veda lo stesso sopra. –

risposta

3

Basta aggiungere un botto di fronte a ciò che stiamo affermando:

assert !(something_false) 
9

Se stai usando MINITEST (Test :: Unit sostituito in Ruby 1.9+), quindi è possibile utilizzare il metodo refute, che è l'inverso di assert.

+0

Questa è la risposta corretta imo – joncodo

4

Personalmente trovo il nome assert_false meglio di refute perché è coerente con tutte le altre affermazioni, ed è anche di solito più in linea con la semantica (simile a utilizzare if !condition invece di unless).

Se ti senti allo stesso modo e vuole assert_false, aggiungerlo in test/test_helper.rb:

class ActiveSupport::TestCase 

    ... 

    def assert_false(test, message="Expected: false. Actual: #{test}.") 
    assert_equal false, test, message 
    end 

end 

EDIT: Si noti che assert !test (suggerito altrove) non funzionerebbe se test è nullo (nil è vero, e probabilmente vorremmo che assert_false(nil) fallisca). Quindi questo è un confronto diretto con false.

4

Rails 4 ha assert_not che fa quello che vuoi.

test "requires valid url" do 
    @mymodel.url = "bogus!" 
    assert_not @mymodel.valid? 
end