4

このサンプルプログラムの場合

N = int(raw_input());
n  = 0;
sum = 0;
while n<N:

    sum += int(raw_input());
    n+=1;

print sum;  

私は一連のテストケースを持っているので、上記の python プログラムを呼び出し、入力を与え、コンソールに出力された出力を検証する python プログラムが必要です。

4

4 に答える 4

3

Unix シェルでは、これは次の方法で実現できます。

$ python program.py < in > out  # Takes input from in and treats it as stdin.
                                # Your output goes to the out file.
$ diff -w out out_corr          # Validate with a correct output set

このようにPythonでも同じことができます

from subprocess import Popen, PIPE, STDOUT

f = open('in','r')            # If you have multiple test-cases, store each 
                              # input/correct output file in a list and iterate
                              # over this snippet.
corr = open('out_corr', 'r')  # Correct outputs
cor_out = corr.read().split()
p = Popen(["python","program.py"], stdin=PIPE, stdout=PIPE)
out = p.communicate(input=f.read())[0]
out.split()
# Trivial - Validate by comparing the two lists element wise.
于 2013-01-19T07:27:13.797 に答える
1

分離の考えを取り上げて、私はこれを検討します:

def input_ints():
    while True:
        yield int(raw_input())

def sum_up(it, N=None):
    sum = 0
    for n, value in enumerate(it):
        sum += int(raw_input());
        if N is not None and n >= N: break
    return sum

合計を印刷

それを使用するには、あなたがすることができます

inp = input_ints()
N = inp.next()
print sum_up(inp, N)

それをテストするには、次のようなことを行うことができます

inp = (1, 2, 3, 4, 5)
assert_equal(sum_up(inp), 15)
于 2013-01-19T14:37:11.863 に答える
0

あなたの問題に使用できるテスト フレームワーク ( prego ) を作成しました::

from hamcrest import contains_string
from prego import TestCase, Task

class SampleTests(TestCase):
    def test_output(self):
        task = Task()
        cmd = task.command('echo your_input | ./your_app.py')
        task.assert_that(cmd.stdout.content, 
                         contains_string('your_expected_output'))

もちろん、prego はそれ以上の機能を提供します。

于 2013-01-19T14:30:49.753 に答える
-1

通常、おそらく Blender が彼のコメントで提案した方法に従って、別の方法でコードを構築したいと思うでしょう。ただし、あなたの質問に答えるには、subprocessモジュールを使用して、このスクリプトを呼び出すスクリプトを記述し、出力を期待値と比較することができます。

特に、check_callメソッドに注目してください。

于 2013-01-19T06:53:26.507 に答える