Передача аргументов как часть юнит-тестов для тестирования скрипта pyspark
У меня есть скрипт Python, который в настоящее время принимает аргумент командной строки "путь к файлу json" и выполняет некоторую очистку данных.
Я пишу некоторые модульные тесты, где я пытаюсь передать путь к файлу json в виде аргумента. В настоящее время возникает ошибка, когда аргумент не передается, но когда он передается, я получаю сообщение об ошибке:
AttributeError: 'module' object has no attribute 'data' which is data.json.
Я хочу иметь три отдельных модульных теста, каждый из которых имеет свой файл json для передачи в качестве аргумента.
Мой код выглядит следующим образом:
import unittest
import sys
import argparse
class TestTransform(unittest.TestCase):
def test_transform(self,input_filename):
target = __import__("cleaning.py")
transform = target
transform.ARGS(input_filename)
self.assertTrue('Pass')
if __name__ == '__main__':
unittest.main()
1 ответ
Если я правильно понял вашу проблему, вот что я обычно делаю в этом случае. Я отменяю setUpClass
Метод и сделать все входные данные для этого класса атрибутов, которые могут быть доступны с помощью тестов:
class TestTransform():
@classmethod
def setUpClass(self, file_name):
self.input_filename = file_name
#Some other initialization code here
def test_transform(self):
target = __import__("cleaning.py")
transform = target
transform.ARGS(self.input_filename)
self.assertTrue('Pass')
Если вы затем хотите сделать разные тесты с разными входными значениями, вы можете создать другие классы, создав подклассы TestTransform
класс (и, конечно, unittest.TestCase
):
class Test1(TestTransform, unittest.TestCase):
@classmethod
def setUpClass(self):
input_filename = 'MyFileName'
#Here call the setUpClass from the TestTransform class
TestTransform.setUpClass(input_filename)