Я знаю, что это плохая практика (я думаю, я нашел трудный путь), но я сделал (относительно) длинный сценарий для компании, чтобы создать документ в формате 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)