2013-12-19 1 views
0

У меня есть тест, который проверяет возвращаемое значение функции, проблема в том, что функция возвращает список кортежей, где каждый кортеж содержит целое число и объект ,проверить, что список содержит те же типы «объектов» python unittest

Объект имеет атрибуты с плавающей запятой, поэтому я хочу использовать assertAlmostEqual, но что-то похожее на «assertSameStructure» в списке.

Таким образом, в псевдо-коде, что я хочу сделать:

import unittest 
class Test(unittest.TestCase): 
    def test_foo(self): 
     result = foo(data) 
     expected_obj = Bar(23.3,12.1) 
     self.assertSameStructure([0,expected_obj],result) 
     self.assertAlmostEquals(expected_obj,result[0][1]) 
+1

'self.assertIsInstance (результат [0], INT) и' self.assertIsInstance (результат [1], Бар) '? – Blender

+0

Результат @Blender может быть любым контейнером длины, а затем – wim

+0

Вы можете написать метод assert, который вы хотите. Перемещайтесь по ожидаемым и фактическим спискам параллельно, и для каждого кортежа утверждайте, что вас интересует в отношении элементов. (Также, я думаю, вам не хватает скобок в вашем вызове.) – user2357112

ответ

0

Если вы уверены, что вы получите только один результат кортеж обратно из теста можно просто проверить

self.assertAlmostEquals([(0,expected_obj)], result) 

единственное, что вам не хватает в вашем псевдокоде, это скобки вокруг целого и объекта.

в качестве альтернативы вы можете реализовать assertSameStructure, запустив isinstance(obj, tuple) и т.д.

2

Есть несколько модулей, которые помогут проверить схемы, а не просто тестирования для определенного поведения. Вот простой пример с schema:

from schema import Schema 

class Test(unittest.TestCase): 
    def assertHasSchema(self, schema, obj): 
     return Schema(*schema).validate(obj) 

    def test_foo(self): 
     result = foo(data) 
     expected_obj = Bar(23.3,12.1) 

     self.assertHasSchema([(int, Bar)], result) 

     self.assertAlmostEquals(expected_obj, result[0][1]) 
+0

Это выглядит очень хорошо, но, похоже, не работает :( – user1443778

+0

>>> from schema import Schema >>> class Bar(): .. . Защита __init __ (Я): ... self.a = 2 ... >>> класс Bar(): ... Защита __init __ (Я): ... self.a = 2 ... >>> из схемы импорта схема >>> класс Bar(): ... Защита __init __ (Я): ... self.a = 2 ... схема (Bar) .validate (Bar()) Traceback (самый последний звонок las t): Повышенный типError ('__ init __() принимает ровно 1 аргумент (2 данный)',) – user1443778

+0

@ user1443778: Это похоже на проблему с классом 'Bar', а не с кодом проверки схемы. Создает ли только новый экземпляр «Бар» выдает ошибку? 'Bar()' – Blender

Смежные вопросы