का उपयोग कर Pytest का परीक्षण करने के लिए एक अजगर प्रोग्राम

0

सवाल

ती हूँ काफी नया करने के लिए अजगर प्रोग्रामिंग और एक सवाल पर परीक्षण का उपयोग कर Pytest. में एक उच्च स्तर के लिए, मैं एक प्रोग्राम है कि के 3 टुकड़े उपयोगकर्ता इनपुट उत्पन्न करता है और एक पाठ फ़ाइल के अंत में. के लिए अपने परीक्षण में, मैं करने के लिए चाहते हैं मूल रूप से फ़ाइलों की तुलना अपने कार्यक्रम outputted के साथ, यह क्या किया जाना चाहिए.

अब, मैं नहीं हूँ यकीन है कि कैसे बारे में जाने के लिए परीक्षण. कार्यक्रम में ही कोई तर्क लेता है, लेकिन बस पर निर्भर करता है, 3 टुकड़े के उपयोगकर्ता इनपुट, जो मैं का उपयोग करेंगे monkeypatch अनुकरण करने के लिए. क्या मैं बनाने के लिए एक नया अजगर फ़ाइल कहा जाता है program_test.py और तरीकों में यहाँ है कि कॉल मूल कार्यक्रम? मैं यह कोशिश की है, लेकिन मैं कर रहा हूँ परेशानी हो रही है वास्तव में बुला मूल कार्यक्रम और भेजने में नकली आदानों. या, मैं परीक्षण किया है मूल कार्यक्रम में (जो बहुत मतलब नहीं होता है मेरे लिए).

मैं कुछ करना चाहते हैं, इस तरह:

import my_program

def test_1():
    inputs = iter(['input1', 'input2', 'input3'])
    monkeypatch.setattr('builtins.input', lambda x: next(inputs))
    my_program
    # now do some assertion with some file comparison
    # pseudocode
    assert filecompare.cmp(expectedfile, actualfile)

यह सिर्फ चल रहा है लगता है मूल कार्यक्रम और मुझे लगता है कि इसके साथ क्या करने के लिए आयात बयान यानी यह कभी नहीं चल रहा है test_1(), शायद इसलिए क्योंकि मैं कभी नहीं इसे कहते हैं? किसी भी मदद की सराहना की जाएगी!

monkeypatching pytest python python-3.x
2021-11-24 03:37:36
1

सबसे अच्छा जवाब

2

उपलब्ध कराने के बिना अपने my_program कोड यह मुश्किल है बताने के लिए क्या हो रहा है.

के बाद से आप उल्लेख कर रहे हैं import समस्याओं, मुझे लगता है कि अपने को परिभाषित नहीं main() और if __name__ == "__main__".

यहाँ एक उदाहरण के कैसे आप परीक्षण कर सकते हैं कि.

सबसे पहले, संरचना अपने my_program करने के लिए है main समारोह में शामिल है, जो कोड और तब जोड़ें if __name__ == "__main__" जो की अनुमति होगी आप को चलाने के लिए main समारोह यदि my_program मार डाला है सीधे, लेकिन यह भी आयात करने के लिए my_program मॉड्यूल के रूप में अन्य फ़ाइलों के लिए (बिना यह चल रहा है, अधिक जानकारी के लिए, कृपया देखें: क्या करता है, तो नाम == "मुख्य": क्या?).

my_program:

def main():
    x = input()
    y = input()
    z = input()
    with open("test", "w") as f_out:
        f_out.write(f"{x}-{y}-{z}")


if __name__ == "__main__":
    main()

अब आप एक बना सकते हैं test.py फ़ाइल और परीक्षण main समारोह के my_program:

import os
import filecmp
import my_program


def test_success(monkeypatch):
    inputs = ["input1", "input2", "input3"]
    monkeypatch.setattr("builtins.input", lambda: next(iter(inputs)))
    my_program.main()
    with open("expected", "w") as f_out:
        f_out.write("-".join(inputs))
    assert filecmp.cmp("expected", "test")
    os.remove("test")
    os.remove("expected")


def test_fail(monkeypatch):
    inputs = ["input1", "input2", "input3"]
    monkeypatch.setattr("builtins.input", lambda: next(iter(inputs)))
    my_program.main()
    with open("expected", "w") as f_out:
        f_out.write("something-else-test")
    assert not filecmp.cmp("expected", "test")
    os.remove("test")
    os.remove("expected")

यह एक उदाहरण है, तो मैं प्रयोग किया जाता os.remove फ़ाइलों को हटाने के लिए. आदर्श रूप में आप परिभाषित करेंगे जुड़नार में अपने परीक्षण का उपयोग करने के लिए tempfile और उत्पन्न यादृच्छिक अस्थायी फ़ाइलें जो होगा स्वचालित रूप से हटा दिया करने के बाद अपने परीक्षण.

2021-11-27 23:57:25

धन्यवाद, यह एक बहुत मदद की! मुख्य पहलू मैं गया था करने के लिए धरना my_program के साथ अगर नाम == "मुख्य"और करने के लिए तो कॉल my_program.मुख्य() में अपने परीक्षण कार्य करता है. बुला रही है .मुख्य() था, काफी महत्वपूर्ण है और मैं कुछ नहीं कर सकता है के बारे में सोचो.
Koonj Patel

@KoonjPatel आप का स्वागत कर रहे हैं. मैं कर रहा हूँ खुशी है कि मैं मदद की!
Vlad Siv

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में