python / python/cpython

new_callable arg to unittest.mock.patch seems not to support partial

Aperta
#137,145 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

stdlib type-bug
Lingua principale
Python
Stelle
77.2k
Fork
35.9k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Bug report

Bug description:

As in the title. The following code seems to disregard the partial and proceed to call the wrapped function right away (instead of calling the wrapping partial object).

from functools import partial
from unittest.mock import patch

def wrapped():
  """an exemplary response from `some.directory.module.my_function` function"""
    return [
        {
            "some_key": "some_value",
        }]

def test_some_func():
    with patch(
        "some.directory.module.my_function", new_callable=partial(wrapped)
    ):

    # calls `my_function` internally
    some.directory.module.another_function()

Running the above will produce: TypeError: 'list' object is not callable.
Acc. to the docs an object passed as new_callable argument should be called by patch to create a new dummy object replacing the target (some.directory.module.my_function). However it seems that instead of partial being called and returning a wrapped function, a wrapped function itself is called returning the list.

CPython versions tested on:

3.11

Operating systems tested on:

macOS

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia dal punto di ingresso unittest.mock.patch e dalla gestione di new_callable, utilizzando il riproduttore partial(wrapped) riportato nella segnalazione. Confronta la sequenza di chiamate osservata con il contratto documentato, quindi aggiungi o aggiorna la copertura di regressione affinché il target venga sostituito dal comportamento callable previsto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
testing
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.