少し手こずったのでメモとして残してきます。
sample.py
import uuid
def get_id():
return uuid.uuid4().hex
test.py
from unittest.mock import patch, Mock, PropertyMock
from sample import get_id
# sample.py内のuuidをパッチする
patcher = patch("sample.uuid.uuid4")
mock = patcher.start()
m = Mock()
# プロパティをモックする
# side_effectを使って連番を返すようにする
p = PropertyMock(side_effect=[f"id_{i}" for i in range(2)])
type(m).hex = p
# uuid4()の返り値にモックを設定する
mock.return_value = m
assert get_id() == "id_0"
assert get_id() == "id_1"
patcher.stop()