2016-07-01 8 views
2

Ich arbeite an Einheit Testfälle für eine Befehlszeilenanwendung in Python mit click Bibliothek zu schreiben.Python - Klicken Sie auf die Befehlszeile Einheit Testfall für die Eingabeaufforderung von der Befehlszeilenfunktion

Ich versuchte unter Beispiel und das funktioniert gut:

def test_hello_world(): 
    @click.command() 
    @click.argument('name') 
    def hello(name): 
     click.echo('Hello %s!' % name) 

    runner = CliRunner() 
    result = runner.invoke(hello, ['Yash']) 
    assert result.exit_code == 0 
    assert result.output == 'Hello Yash!\n' 

Aber jetzt will ich Eingabeaufforderung von meiner Funktion.

wie folgt aus:

def test_name_prompt(self): 
    @click.command() 
    @click.option('-name', default=False) 
    def username(): 
     fname = click.prompt("What's your first name?") 
     lname = click.prompt("what's your last name?") 
     click.echo("%s %s" % (fname, lname)) 

    runner = CliRunner() 
    result = runner.invoke(username, ['-name']) 
    assert result.exit_code == 0  
    assert result.output == 'Yash Lodha' 

Antwort

0

Klicken Sie setzt den ‚Input‘ Parameter für diesen Zweck (http://click.pocoo.org/5/testing/), die von Ihnen eingegebenen Daten zur Verfügung zu stellen, um stdin verwenden, um eine Eingabeaufforderung zu befriedigen.

import click 
from click.testing import CliRunner 

def test_prompts(): 
    @click.command() 
    @click.option('--foo', prompt=True) 

    def test(foo): 
     click.echo('foo=%s' % foo) 

     runner = CliRunner() 
     result = runner.invoke(test, input='wau wau\n') 
     assert not result.exception 
     assert result.output == 'Foo: wau wau\nfoo=wau wau\n'