2015-08-31 2 views
0

Я прочитал документацию python для unittest и нашел это немного запутанным. Я написал тестовый файл с методами тестирования различных классов и методов, вдоль линий:Как проверить конкретные случаи в unittest?

class test_class_Graph(unittest.TestCase): 
    def __init__(self): 
     test_graph = Graph() 
    def test_method__init__(self): 
     assertEquals(x, y) 
    def test_method_node(self, name): 
     node = test_graph.node(name) 
     assertIsInstance(node, Node) 
     assertEquals(node.name, name) 
class test_class_Node(unittest.TestCase): 
    etc 

я создал несколько тесты-методов с «если еще» заявлениями, что соответствует «если еще» заявлению в реальных методах. Это своего рода тестовый сценарий - при определенных условиях метод должен действовать одним способом, при других условиях мы ожидаем, что метод будет производить что-то другое.

Есть определенные случаи, когда я не хочу разбивать множество возможных условий на «if-else», я просто хочу проверить несколько «выборок» для более сложных методов. Например, если вход является конкретным «X», я хочу, чтобы на выходе был определенный «Y».

Где я могу написать конкретные тестовые примеры? Должен ли я запускать свои тесты из командной строки, вводя туда вход? Или я должен просто выполнить тестовый файл из командной строки с помощью «run» и каким-то образом иметь последовательность предварительно выбранных входов и ожидаемых результатов?

+0

Возможно, вы захотите уточнить более конкретные описания того, что вы пытаетесь сделать, но я думаю, что получаю общую идею. –

+0

Используйте 'setUp', а не' __init__' (но сохраняйте свои методы 'setUp' очень просто или полностью опустите их). –

ответ

0

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

def main(): 
    x = input('what is your x?') 
    y = input('what is your y?') 
    z = input('And what is your z?') 
    print(process_data(x, y, z)) 

Затем вы можете проверить свою логику, как это: Ах, я вижу, что использовали UnitTest.

from mycode import process_data 

class TestDataProcessing(unittest.TestCase): 
    def try_one_thing(self): 
     result = process_data(11, 44, 'Steve') 
     assertEquals(result, 99) 

    def try_another_thing(self): 
     result = process_data(2, 6, 'Alan') 
     assertEquals(result, 12) 

Имеют смысл?

+0

Ну, это будет отличный способ проверить код, я согласен. Но я хочу использовать unittest по разным причинам. Сердце моего вопроса состояло в том, как мы используем unittest-файлы - добавляем ли мы примеры ввода и ожидаемого вывода в файл где-нибудь, или мы запускаем тесты, вводя тестовые входы из командной строки? – jukhamil

+0

Поскольку я читал, что если вы запустили тестовый файл, он просто автоматически выполнит все методы тестирования. Однако я не понимаю, как это можно сделать без подачи ввода. – jukhamil

+0

Это использовало unittest! Именно так вы это делаете. Вы добавляете методы, которые пробуют разные входы и сравнивают их с ожидаемыми результатами. Я расширил этот пример, чтобы показать, как он будет выглядеть. –

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