Pedro Miguel wrote: > Hi guys, I'm trying to test the code in the main() but I'm a bit unsure > how to go about it since I'm not passing any arguments or even returning > anything other then logging. For the purposes of the example I've > shortened the tree statements in the function.. Can anyone point me in the > right direction on how to test the logic below? Or perhaps give me an > example on how to test the code below (that would be really appreciated). > I've posted this question on Stackoverflow but the guys over there told me > to mock it but no one provided an example (I'm fairly new on mocking)..and > how could I mock the if statements or even the for loop? script.py > > from . import settings > > > def main(): > if settings.PATHS: # list containing full paths to a directory of > files > paths = settings.PATHS > for path in paths: > data = read_file(path) > modified_data = do_something_with_the_data_collected(data) > write_to_new_file(modified_data) > else: > logger.warning("There are no files in > {}".format(settings.FILES_DIRECTORY)) > > if __name__ == '__main__': > main() > tests/file_tests.py > import unittest > > from module.script import main > > > class FileManagerTests(unittest.TestCase): > > def test_main_func(self): > main() # ?? this is where I am stuck, should I just test > # that it logs correctly if certain data exists > # in settings file? > > if __name__ == '__main__': > unittest.main() > > RegardsPedro+44(0)7549646235pedro.mig...@live.co.uk
Keep it simple and avoid mocking. Instead set up some test input data and a script that compares the actual with the expected output. If in addition you refactor the code in main in such a way that the building blocks can easily be tested with conventional unit tests you get better coverage for less effort. Here's how main() might look after refactoring: def main(): if not process_files(settings.PATHS): logger.warning(...) def process_files(paths): has_files = False for path in paths: has_files = True process_file(path) return has_files def process_file(path): ... _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor