Передача аргументов как часть юнит-тестов для тестирования скрипта pyspark - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть скрипт на python, который в настоящее время принимает аргумент командной строки «путь к файлу json» и выполняет некоторую очистку данных.

Я пишу некоторые модульные тесты, в которых я пытаюсь передать путь к файлу json в виде аргумента. В настоящее время возникает ошибка, когда arg не передается, но когда она передается, я получаю сообщение об ошибке:

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 Ответ

0 голосов
/ 15 ноября 2018

Если я правильно понял вашу проблему, вот что я обычно делаю в этом случае. Я переопределяю метод 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...