Python assertEqal строка - игнорировать ее часть - PullRequest
0 голосов
/ 16 июня 2019

Я использую python 3.6.7

В тестах я использую assertEqual для сравнения строковых объектов.Эти строки содержат некоторые временные данные.Поскольку эти данные отличаются от теста к тесту, я хочу игнорировать эти данные.Это выполнимо?

например, это сопоставимый объект:

obj1 = '{"field1": "field1", "field2": "field2", "created_at": "2019-06-16T07:12:46.429536Z", "field2": "field3"}'

Я хочу сделать что-то вроде:

obj1 = '{"field1": "field1", "field2": "field2", "created_at": ANY, "field2": "field3"}'
obj2 = '{"field1": "field1", "field2": "field2", "created_at": "2019-06-16T07:12:46.429536Z", "field2": "field3"}'
assertEqual(obj1, obj2)

Ответы [ 2 ]

2 голосов
/ 16 июня 2019

Поскольку строки являются сериализованными объектами json, я бы лучше сравнил данные, чем представление, которое может меняться и случайным образом нарушать тесты.Например:

import json
v1 = json.loads(obj1)
v2 = json.loads(obj2)

del v1['created_at']
del v2['created_at']
assertEqual(v1, v2)
0 голосов
/ 16 июня 2019

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

import re
obj1 = '{"field1": "field1", "field2": "field2", "created_at": ANY, "field2": "field3"}'
obj2 = '{"field1": "field1", "field2": "field2", "created_at": "2019-06-16T07:12:46.429536Z", "field2": "field3"}'

obj1 = re.sub(r' "created_at[^,]*,', '', obj1)
obj2 = re.sub(r' "created_at[^,]*,', '', obj2)
assertEqual(obj1, obj2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...