Передача аргументов как часть юнит-тестов для тестирования скрипта 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)
Другие вопросы по тегам