Rubyist пишет Python здесь. У меня есть код, который выглядит примерно так:
result = database.Query('complicated sql with an id: %s' % id)
Сценарий database.Query
смоделирован, и я хочу проверить, правильно ли вводится идентификатор без жесткого кодирования всего оператора SQL в моем тесте. В Ruby/RR я бы сделал это:
mock(database).query(/#{id}/)
Но я не вижу способа настроить "селективный макет", подобный этому, в unittest.mock, по крайней мере, без какой-либо волосатой логики side_effect
. Поэтому я попытался использовать регулярное выражение в утверждении:
with patch(database) as MockDatabase:
instance = MockDatabase.return_value
...
instance.Query.assert_called_once_with(re.compile("%s" % id))
Но это тоже не работает. Этот подход работает, но он уродлив:
with patch(database) as MockDatabase:
instance = MockDatabase.return_value
...
self.assertIn(id, instance.Query.call_args[0][0])
Лучшие идеи?