蟒模拟发射而不是代输入到特定方法整个程序

问题描述 投票:0回答:1

我有一个程序,如:

模块“主”:

import SymbolCalculator as sc


# Defining constants:
TEXT_INTRO = sc.TEXT_INTRO
TEXT_INVITE = "Please print any sentence below:\n"
sentence = ""
# Printing introduction to the program:
print TEXT_INTRO

def getting_result():
    # Getting input string from console
    sentence = sc.get_input_from_prompt(TEXT_INVITE)
    # Forming result list via methods defined in SymbolCalculator module
    return sc.characters_calculator(sentence)
result_list = getting_result()
# Computing summary via method defined in SymbolCalculator module
sc.printing_summary(sentence, result_list)
# Printing tuples with characters and their occurrences raw-by-raw
sc.printing_list(result_list)
raw_input("Please press any button to quit the program.")
print 'Bye!!!'

而我试图创建的raw_input嘲笑(更新)一个简单的单元测试:

from unittest import TestCase, main
from mock import patch
from Ex_41_42_SymbolCalculatorMain import getting_result


class Ex_4a1_SymbolCalculatorUnitTestWMock(TestCase):
    #@patch ('Ex_41_42_SymbolCalculator.get_input_from_prompt', return_value = 'aabc')
    def test_valid_input(self):
        with patch('__builtin__.raw_input', return_value = 'aaabbc') as _raw_input:
            self.assertEqual(getting_result(), [('a', 3), ('b', 2), ('c', 1)])
            _raw_input.assert_called_once_with('Please print any sentence below:\n')

    @patch ('Ex_41_42_SymbolCalculator.get_input_from_prompt', return_value = '')
    def test_empty_input(self, mock):
        self.assertEqual(getting_result(), [])

if __name__ == "__main__":
    main()

以及我试图通过自身的测试方法的装修中去,这样的:

...
@patch ('Ex_41_42_SymbolCalculator.get_input_from_prompt', return_value = 'aabc')
...

我的问题是,当我启动测试,所有的“主”模块在getting_result方法调用的时刻运行。因此,它从一开始就开始,问我如何透过命令提示符,等等。这样不仅测试的输入,但整个常规程序运行。

虽然我很期待,只有getting_result方法被调用设置有return_value

请指教。

python unit-testing mocking python-unittest raw-input
1个回答
1
投票

当您导入模块,该模块中的所有代码运行。不要紧,你用来代替from Ex_41_42_SymbolCalculatorMain import getting_result import Ex_41_42_SymbolCalculatorMain;你还在导入模块。有没有办法只有“搞定”一个功能,无需在模块中执行代码的其余部分。

相反,你应该把这些代码的功能,然后从if __name__ == "__main__"块中调用它,就像这样:

def getting_result():
    # Getting input string from console
    sentence = sc.get_input_from_prompt(TEXT_INVITE)
    # Forming result list via methods defined in SymbolCalculator module
    return sc.characters_calculator(sentence)

def do_stuff():
    print TEXT_INTRO
    result_list = getting_result()
    # Computing summary via method defined in SymbolCalculator module
    sc.printing_summary(sentence, result_list)
    # Printing tuples with characters and their occurrences raw-by-raw
    sc.printing_list(result_list)
    raw_input("Please press any button to quit the program.")
    print 'Bye!!!'

if __name__ == "__main__":
    do_stuff()

然后,如果你直接执行该文件,如果你不导入do_stuff()才会运行。这将允许您导入模块,而不在do_stuff运行的东西。您可以通过搜索该网站的有关问题,它(如__main__)不计其数了解更多关于this one业务。

© www.soinside.com 2019 - 2024. All rights reserved.