mock.patch applied at class level behaves incorrectly
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 36k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
Bug report
When applying @mock.patch to classes where the test_ method is inherited, this applies the patch to the base class,, instead of to the specific class. In this case, the patch to the g method applies in MockedFTests and MockedFStraightGTests.
# a.py
import unittest
from unittest import mock
def f():
return 41
def g():
return 43
class BaseFTests(unittest.TestCase):
def test_a(self):
self._asserts(f())
def _asserts(self, val):
print(self, val)
@mock.patch('a.f', new=lambda: 2)
class MockedFTests(BaseFTests):
def _asserts(self, val):
print(self, val)
self.assertEqual(val, 2)
self.assertEqual(g(), 43)
@mock.patch('a.g', new=lambda: 3)
class MockedFMockedGTests(MockedFTests):
def _asserts(self, val):
print(self, val)
self.assertEqual(val, g()-1)
class MockedFStraightGTests(MockedFTests):
def _asserts(self, val):
print(self, val)
self.assertEqual(val, 2)
self.assertEqual(g(), 43)
Expect all tests to pass.
Actual output: 2 tests fail with error AssertionError: 3 != 43
Your environment
- CPython versions tested on: Python 3.10.4 on Windows
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece reproduzindo o exemplo em um módulo pequeno usando unittest.mock.patch, concentrando-se nos métodos test_ herdados e nas classes BaseFTests, MockedFTests, MockedFMockedGTests e MockedFStraightGTests. Rastreie o comportamento de patch em nível de classe no unittest.mock e adicione um teste de regressão para o caso de herança relatado. Está concluído quando os testes do exemplo passam sem aplicar o patch da subclasse às classes irmãs.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- testing-qa
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 42/100