2015-08-11 2 views
1

Я знаю, что это плохая практика (я думаю, я нашел трудный путь), но я сделал (относительно) длинный сценарий для компании, чтобы создать документ в формате PDF, и нанести на него несколько изображений, созданных с помощью внешних пакетов. Таким образом, этот сценарий имеет множество зависимостей, и в некоторых частях он немного сложный.Как применять unittests после кодирования?

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

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

import sys 
sys.path.append('../') 

from PTRGenerator import * 
import unittest 

class PTRTest(unittest.TestCase): 
    """PTR Test case""" 

    # preparing the tests 
    def setUp(self): 
     """ Setting up for the first test """ 
     print "PTRTest:setUp_:begin" 
     # do something 
     print "PTRTest:setUp_:end" 

    # ending the test 
    def tearDown(self): 
     """Cleaning up after the test""" 
     print "PTRTest:tearDown_:begin" 
     # do something 
     print "PTRTest:tearDown_:end" 

    def testA(self): 
     """Test routine A""" 
     print "PTRTest:testA" 

    def testB(self): 
     """Test routine B""" 
     print "PTRTest:testB" 

if __name__ == "__main__": 

    # creating a new testsuite 
    newSuite = unittest.TestSuite() 

    # adding a testcase 
    newSuite.addTest(unittest.makeSuite(PTRTest)) 

Кусок «сложного» код будет выглядеть следующим образом (я надеюсь, что это не то, что комплекс вообще):

# method to show footer. 
def footer(canvas, doc): 
    canvas.saveState() 

    # footer consists of a table with 1 row, to make it look like the headers of the rest of the document 
    footerTable = [] 
    footerTable.append(["PDF V%s" % jf['PDF_version'], "PAGE %i OF 2" %canvas.getPageNumber(), "%s" % time.strftime("%d-%b-%Y")]) 
    saveString = '%s.%s.%s.%i.pdf' %(jf['external_sample_id'], jf['study_name'], jf['our_sample_id'], args.id) 
    footerTable.append(["%s" %saveString, "", "FOR RESEARCH USE ONLY"]) 

    rowHeight = 15 

    ft = Table(footerTable, colWidths=(250, 50, 250), rowHeights=rowHeight) 
    ft.setStyle(TableStyle([('FONT', (0,0), (-1,-1), HEADERS_FONT), 
       ('FONTSIZE', (0,0), (-1, -1), HEADERS_FONT_SIZE), 

       ## set boxes around appropriate cells 
       # hotspot seq coverage box 
       ('TEXTCOLOR', (0, 0), (-1, -1), BOX_TEXT), 
       ('BOX',  (0, 0), (-1, -1), 1, BOX_COLOR), 
       ('BACKGROUND', (0, 0), (-1, -1), BOX_COLOR), 

       # Align the first line of the footer to the left, middle and right for elements 1 2 and 3 
       ('ALIGN', (0,0), (0, 0), 'LEFT'), 
       ('ALIGN', (1,0), (1, 0), 'CENTER'), 
       ('ALIGN', (2,0), (2, 0), 'RIGHT'), 

       # Align the second row 
       #('SPAN', (0,1), (2, 1)), 
       ('ALIGN', (0,1), (0, 1), 'LEFT'), 
       ('ALIGN', (2,1), (2, 1), 'RIGHT'), 
       ('VALIGN', (0,0), (-1, -1), 'MIDDLE') 

       ])) 

    ft.wrapOn(canvas, 100, 20) 
    ft.drawOn(canvas, 22, 10) 

    canvas.restoreState() 

Как Я знаю, какие значения для проверки сложного вывода, например?

Как проверить вывод изображения (изображения отображаются на основе переменных данных)?

Как проверить типов элементов, которые зависят от других библиотек (например, у меня есть много объектов ReportLab)

ответ

0

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

Эти более простые методы становятся намного проще в тестировании. Я ваш тест, вы можете передать в args и проверить выход, чтобы убедиться, что обработка выполнена правильно.

Вы также можете проверить образцы файлов. Использование знанных входов (изображений и т. Д.) Генерирует выходные данные (PDF). Теперь, когда у вас уже есть действующий код, вы можете использовать тестовые входы для создания PDF-подтверждения. Затем запустите свои тесты с помощью тестовых входов и подтвердите вывод (например, с помощью контрольной суммы MD5 или SHA1) с известным допустимым выходом.

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