Как провести модульное тестирование или имитацию метода класса с помощью TensorFlow hparams

Я хочу либо смоделировать, либо написать модульный тест для метода класса, когдаhparamsМодуль в TensorFlow используется для передачи аргументов ключевого слова методу класса. Я просмотрел несколько вопросов и ответов здесь (в StackOverFlow) о том, как "имитировать" или "тестировать" методы класса в Python, но все еще не могу заставить этот пример работать. Мой код выглядит следующим образом:

from tensorflow.contrib.training.python.training import hparam

def create_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument('--iter', help='Number of iteration', default= 50, type=object)
    parser.add_argument('--nclasses', help='Number of classes', default=3, type=int)
    args = parser.parse_args()
    h_params = hparam.HParams(**args.__dict__)
    return h_params


# Class to use hparams returned from the create_parser function
class MainProgFile(object):
    def build_params(self, hparams):
        return hparams.iter + 40, hparams.nclasses * 2

if __name__ == '__main__':
    # call function and pass HPARAMS
    HPARAMS = create_arg_parse_parameters()
    b_iter, mod_p = MainProgFile().build_params(HPARAMS)

И написал следующий класс unittest для build_params метод:

class TestMainProgFile(unittest.TestCase):
    def test_build_params(self)
        kwargs = {'nclasses': 2, 'iter': 40}
        n_cnt, w_class = m.build_params(*kwargs)
        self.assertEquals(n_cnt, 42)
        self.assertEquals(w_class, 80)

Но получил следующее сообщение: TypeError: build_params() takes 2 positional arguments but 3 were givenТакже попробовал добавить декоратор патча: @patch('MainProgFile.build_params') на build_paramsфункция, но также не мог проверить или "смоделировать" функцию. Я также пробовал использовать функцию параметризации pytest следующим образом:

    @pytest.mark.parametrize("kwargs, expecting", [({'iter': 5}, [55, [(4, 5), (1, 5), (5, 3), (1, 3)]),
    ({'nclasses': 3}, [55, [(4, 5), (1, 5), (5, 3), (1, 3)]]), ])
    def test_build_params2(self, kwargs, expecting):
        m = MainProgFile()
        assert m.build(**kwargs) == expecting

Но появилось следующее сообщение об ошибке:

def run(self, result=None):
        orig_result = result
        if result is None:
            result = self.defaultTestResult()
            startTestRun = getattr(result, 'startTestRun', None)
            if startTestRun is not None:
                startTestRun()
    
        result.startTest(self)
    
        testMethod = getattr(self, self._testMethodName)
        if (getattr(self.__class__, "__unittest_skip__", False) or
            getattr(testMethod, "__unittest_skip__", False)):
            # If the class or method was skipped.
            try:
                skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
                            or getattr(testMethod, '__unittest_skip_why__', ''))
                self._addSkip(result, self, skip_why)
            finally:
                result.stopTest(self)
            return
        expecting_failure_method = getattr(testMethod,
                                           "__unittest_expecting_failure__", False)
        expecting_failure_class = getattr(self,
                                          "__unittest_expecting_failure__", False)
        expecting_failure = expecting_failure_class or expecting_failure_method
        outcome = _Outcome(result)
        try:
            self._outcome = outcome
    
            with outcome.testPartExecutor(self):
                self.setUp()
            if outcome.success:
                outcome.expecting_failure = expecting_failure
                with outcome.testPartExecutor(self, isTest=True):
>                   testMethod()
E                   TypeError: test_build_mlp_structure() missing 2 required positional arguments: 'kwargs' and 'expecting'

../../../miniconda3/envs/myenv/lib/python3.6/unittest/case.py:605: TypeError

Любая помощь будет оценена по достоинству.

0 ответов

Другие вопросы по тегам