2010-06-24 2 views
0

У меня есть метод с не-предопределенным количеством итераций внутри него трудоемкий, что мне нужен для теста:питона/Джанго UnitTest функция коррекция

def testmethod(): 
    objects = get_objects() 
    for objects in objects: 
     # Time-consuming iterations 
     do_something(object) 

Одна итерации достаточно, чтобы проверить меня. Какова наилучшая практика тестирования этого метода только с одной итерацией?

ответ

2

Возможно превратить ваш метод в

def my_method(self, objs=None): 
    if objs is None: 
     objs = get_objects() 
    for obj in objs: 
     do_something(obj) 

Тогда в тесте вы можете назвать его с помощью пользовательского Objs параметра.

+0

Спасибо. Я попробую это – dragoon

2

Update:

я неверно оригинальный вопрос, так вот как я бы решить эту проблему без изменения исходного кода:

Lambda из вашего вызова, чтобы получить объекты, чтобы вернуть один объект. Например:

from your_module import get_objects 

def test_testmethdod(self): 
    original_get_objects = get_objects 
    one_object = YourObject() 
    get_objects = lambda : [one_object,] 

    # ... 
    # your tests here 
    # ... 

    # Reset the original function, so it doesn't mess up other tests 
    get_objects = original_get_objects 
+0

Но в вашем примере break будет выполняться всегда, причем не только тогда, когда этот метод используется в тестовом файле. – dragoon

+0

Извините, я неправильно прочитал ваш первоначальный вопрос. Я обновил свой ответ с помощью решения, которое не заставит вас изменить источник. – sdolan

+0

Хорошо, я понимаю ваше решение, я также использую его в другом тесте, но в этом случае я буду использовать технику Алекса, – dragoon