2016-12-18 11 views
0

オンラインPythonコースを行っています。このコースのorginisersは、ユーザーがそれぞれのテストに合格しなければならない目に見える隠された要件を持っていると言います。この場合、probelem文は次のとおりです。会議の必要性にもかかわらず、Pythonユニットテストが失敗する

次のように行動する関数と呼ばmanipulate_data書く: を整数のリストを与えられたときに、最初の要素は陽性数のカウントがあるリストを返します2番目の要素は負の数の合計です。 NB:0を陽性として扱います。

私はユニットテストケース

def manipulate_data(listinput): 
    report = [0,0] 
    if type(listinput) != list: 
    #I may need some work here.. see unit test line 6 
     assert "invalid argument" 
    for digit in listinput: 
    #is an even number so we increment it by 1 
     if digit >= 0 and type(digit) == int: 
      report[0] += 1 
    #number is less than zero, adds it sum 
     elif digit < 0 and type(digit) == int: 
      report[1] += digit 
    return report 

私は、コードを実行するたびに、多分ライン6除く見える要件を渡し、私はいつもインジケート、このエラーメッセージを取得すると信じている、この思い付きました私のコードは3つのうち2つのテストに合格します。私はこれがtest_only_list_allowed(self)だと思います。私はこの種のことに本当に慣れていないので、助けが必要です。 enter image description here

Unit Test

答えて

0

テストコードがをが返される文字列を期待していることを示しています。 assertは代わりにAssertionError例外を発生させます。 assertEquals()テストが探しているのと同じ文字列を返したいので、引数(に失敗したときに表示されます)ではなく、'Only lists allowed'ではありません。

代わりのassert使用returnを使用して、および予想される文字列を返します。通常、あなたがタイプのテストにisinstance()を使用したい

if type(listinput) != list: 
    return "Only lists allowed" 

注:

if not isinstance(listinput, list): 
    return "Only lists allowed" 
for digit in listinput: 
    if not isinstance(digit, int): 
     continue 
    if digit >= 0: 
     report[0] += 1 
    elif digit < 0: 
     report[1] += digit 

を私はのための単一のテストを使用各ブランチでテストする代わりに整数を使用します。あなたは0との比較をサポートしないタイプを持つことさえできるので、そのテストを最初からやりたいのです。

+0

ありがとうございました、魅力的なように働いた。この日に戦っていた –

+0

[stackexchange](http://softwareengineering.stackexchange.com/questions/338373/python-code-fails-unit-test)で問題を提起している関連する質問を見ることができたら、私はさまよっていました。 - 会議の必要性) –

+2

@ Nexima360:ソフトウェアエンジニアリングサイトで質問してください*ではありません。レート制限のためにここに投稿できない場合は、*できるようになるまで待ちます。制限を回避する方法として、そのような質問が話題になっていない別のサイトを使用しないでください。 –

関連する問題