2016-04-13 12 views
0

I die folgende Klasse in Ruby in der Datei test_class.rb haben:Execute rubin Methode von Befehlszeilen

class TestClass 

    def test_verify_one 
     # DO SOME 
    end 

    def test_verify_two 
     # DO SOME 
    end 

end 

Zur Ausführung dieser Klasse I senden zwei Parameter an das Terminal, ENVIRONMENT und Sprache.

So ... von Terminal zu nennen ich benutze:

ruby test_class.rb ENVIRONMENT LANGUAGE 

Diese beiden Methoden ausführt.

Ich möchte nur eine ausführen.

Ich habe versucht, die folgenden:

ruby -r "test_class.rb" -e "TestClass.test_verify_one" ENVIRONMENT LANGUAGE 

aber es funktioniert nicht.

Können Sie mir helfen?

+1

ist die 'def das Problem self.name_of_method' ??? –

+2

"Dies führt beide Methoden aus" - nein, das tut es nicht, angesichts des Codes, den Sie zeigen. Nichts wird hier ausgeführt. –

+0

@SergioTulentsev, Sie hatten Recht ... das ist etwas, das ich hinzugefügt habe, um einen neuen Ansatz zu versuchen. Ich habe den Code aktualisiert. –

Antwort

2

Im selben Ordner wie test_class.rb, führen Sie den ruby Befehl mit der folgenden Befehlssyntax:

ruby -I . -r "test_class" -e "TestClass.test_verify_one" arg1 arg2 

Brechen Sie diesen Befehl nach unten erhalten wir:

-I . aktuelles Verzeichnis in $ LOAD_PATH einschließen, damit wir verwenden require

-r Erfordern Sie eine Datei namens test_class innerhalb der $ LOAD_PATH. Dies ist möglich, weil wir das aktuelle Verzeichnis oben in unseren Ladepfad eingefügt haben (die Erweiterung .rb ist hier optional).

-e Wie Sie angegeben haben, wird der folgende Code ausgewertet.

Wenn wir nun ARGV innerhalb dieser Methode aufrufen, sollten wir arg1 und arg2 auf separaten Linien erhalten:

#... 
def self.test_verify_one 
    puts ARGV 
end 
#... 
+0

Dank @Anthony E Jetzt habe ich dieses Problem habe: '-e: 1: in'

': nicht definierte Methode 'test_verify_one' für Testclass: Klasse (NoMethodError)' –

+0

Did Deine ursprüngliche Frage benutzt eine Klassenmethode? In Ihrem Fall wäre das '-e TestClass.new.test_verify_one'. Es spielt keine Rolle, ob Sie hier eine Klassen- oder Instanzmethode verwenden –

+0

Ich tat @Anthony, Ich versuchte mit 'ruby -I. -r "test_class" -e "TestClass.new.test_verify_one" arg1 arg2' und auch mit 'ruby -I. -r "test_class" -e "TestClass.new (test_verify_one)" arg1 arg2' aber ich bekomme: 'C: /Ruby22-x64/lib/ruby/gems/2.2.0/gems/test-unit- 3.0.8/lib/test/unit/testcase.rb: 400: in 'initialize ': falsche Anzahl von Argumenten (0 für 1) (ArgumentError) von -e: 1: in' new' von -e: 1 : in '

'' –

0

Wenn Sie Ihre erste Methode, die Variablen nehmen Sie es vorbei sind Sie müssen definieren, Ihre erste Methode zwei Variablen zu übernehmen, etwa so:

class TestClass 

    def test_verify_one (var1, var2) 
      # DO SOME 
     end 

     def test_verify_two 
      # DO SOME 
     end 

end 

Sie erhalten dann eine Bedingung in die zweite setzen müssen, auf die sie nur ausführen unter den Bedingungen, dass du es ... oder es nur wollen auf Kommentar ob Du brauchst es im Moment nicht. So zum Beispiel, wenn Sie nur Test 2 abzufeuern wollten, als Variablen wurden nicht eingeleitet, würde der Code wie folgt aussehen:

class TestClass 

    def test_verify_one (var1, var2) 
     # DO SOME 
    end 

    def test_verify_two (var1, var2) 
     if (var1 and var2) defined? nil 
     # DO SOME 
    end 

end