У меня есть функция, которая должна установить атрибут объекта к PIL экземпляра изображения:assertIsInstance() против нескольких имен классов
from PIL import Image
class SimpleExample:
def __init__(self):
self.img = self.load_image()
def load_image():
self.img = Image.open(image)
Для проверки надлежащего исполнения load_image() я думал использовать unittest.TestCase. assertIsInstance(), но интроспекция результирующего экземпляра дает другой класс . имя в зависимости от типа файла загруженного изображения. Я не могу найти что-либо по строкам assertIsInstanceFromModule() в unittest, так что это, похоже, помощник утверждения, который лучше всего отражает то, что я действительно пытаюсь проверить.
Я придумал пару решений, но я не удовлетворен ни с одной из них:
использовать цикл Подготовить список всех возможных имен классов, перебирать, хотя список, проверить каждый элемент равенства, затем assertIsInstance для соответствующего члена списка. Это неудобно, бесстрашно, и я, конечно, не очень этому горжусь. Однако он работает, и он использует то, что, по моему мнению, является самым значимым утверждением.
simplified_names = ['JpegImageFile', 'PngImageFile']
for i, name in enumerate(simplified_names):
if SimpleExample.img.__class__.__name__ == name:
TestCase.assertIsInstance(SimpleExample.img, simplified_names[i])
Использование другого помощника утверждения Подготовить список всех возможных имен классов и утверждают, что имя класса создаваемого объекта в этом списке. Это работает, это просто, но мне не нравится, что я на самом деле утверждаю здесь.
simplified_names = ['JpegImageFile', 'PngImageFile']
TestCase.assertIn(SimpleExample.img.__class__.__name__, simplified_names)
Есть ли у кого-нибудь другое представление о том, как утверждать против нескольких возможных имен классов? Должен ли я приближаться к тесту с другого направления и использовать другое утверждение? Это мой первый набег на unittest. Должен ли я вернуться к простому тестированию моего кода с помощью печати?
~~~~~ И очевидный ответ ...
Тест против родительского класса. С другой стороны, я мог бы заметить, что это лучший вариант был представлен ко мне каждый раз, когда я увидел следующую ошибку:
TypeError: isinstance() arg 2 must be a type or tuple of types
акцент на «или кортежа.»
Спасибо за помощь Martijn Pieters.
Если я пытаюсь это: 'assertIsInstance (IMG, PIL)' он выдает ошибку типа: 'TypeError: isinstance() аргумент 2 должен быть тип или кортеж types' ли я непонимание, что вы предлагаете? –
@Jefe: Я включил образец теста. –
Да, это и было. Спасибо. Не могли бы вы объяснить, насколько я должен был найти правильное имя родительского класса? Я проверил .__ class__ на экземпляр объекта, на который я смотрю, и это, очевидно, не так. –