Conversation
- Adiciona stubs reais para CakeRequest/CakeResponse (e subclasses dinâmicas), contornando a colisão entre o método method() dessas classes e a Method trait do MockObject no PHPUnit 12. - Recria a semântica do removido MockBuilder::addMethods() via _extendWithStubMethods(), que gera no-ops para métodos ausentes. - Quando $methods está vazio, agora aplica onlyMethods com todos os métodos públicos (incluindo abstratos) para que expects()->method() continue funcionando como no PHPUnit 10. - ControllerTestCase passa a usar o helper getMock() em vez de getMockBuilder direto. - Ajustes pontuais em ControllerTest::testReferer (remove chamada legada setReturnValue) e CakeFixtureManagerTest (passa name no construtor do TestCase mockado).
- CakeTestCase: descarta mock objects sem expectations antes da verificacao do PHPUnit, suprimindo os notices "No expectations were configured for the mock object" sem alterar comportamento - CakeFixtureManager: declara a propriedade $_processed (era dinamica) - CakeRequest::clientIp(): cast para string antes do trim() - DboSourceTest: #[\ReturnTypeWillChange] nos metodos do MockPDO - ValidationTest: casts (double) -> (float)
- ControllerTaskTest/ModelTaskTest: usa indice fora dos limites calculado a partir do numero real de tabelas, em vez de valor fixo que assumia poucas tabelas no banco de teste - TranslateBehaviorTest::testFieldsRestoreAfterBind: fixa locale 'eng' (o teste dependia do locale padrao do ambiente) - RouterTest: substitui getMock + new externo (incompativel com PHPUnit 12) por classes de duplo de teste concretas (MockConnectedRoute/MockReturnRoute)
- CakeStubTrait: metodos passados a getMock() agora retornam null quando nao ha retorno configurado (semantica do PHPUnit), em vez de invocar a implementacao real. Resolve testes de envio de arquivo (testFile*, testDispatchActionSendsFile) em que _flushBuffer/_clearBuffer reais manipulavam o buffer de saida e zeravam o conteudo capturado - CakeResponseStub: adiciona wrappers para _setContentType, _isActive, _clearBuffer e _flushBuffer - CakeTestCase: passa a lista de metodos mockados ao stub e ignora _cakeSetMockedMethods ao gerar stubs de subclasses - CakeRequestTest: limpa CONTENT_TYPE/HTTP_CONTENT_TYPE no tearDown
CakeStubBuilder/CakeStubTrait passam a registrar stubs por indice de invocacao quando o matcher e o shim de at(), em vez de sobrescrever o stub anterior. Resolve falhas em testes que configuram retornos diferentes para chamadas sucessivas do mesmo metodo (ex.: RequestHandlerComponentTest::testRequestMethod, SecurityComponentTest::testValidatePostUrlAsHashInput).
O shim mockava todos os metodos da classe (getMock() sem onlyMethods), fazendo metodos concretos retornarem null. Agora coleta os metodos abstratos via reflexao e usa onlyMethods(), preservando a implementacao real dos metodos concretos. Resolve os 6 erros e 16 falhas de ControllerTestCaseTest (generate()/testAction() retornavam null).
Os testes chamavam restore_error_handler() inline e tambem marcavam _restoreError=true, fazendo o tearDown restaurar novamente (1 set, 2 restores) e remover o handler do proprio PHPUnit. Remove a chamada inline e deixa o tearDown fazer a unica restauracao. Resolve 5 testes "risky" e uma falha em cascata em CakeTimeTest.
Mesmo padrao do DebuggerTest: remove as chamadas inline de restore_error_handler() nos testes que ja marcam _restoreError=true, deixando o tearDown fazer a unica restauracao. Resolve 6 testes "risky".
Testes que verificam comportamento apenas via expects()->method() nos stubs de CakeRequest/CakeResponse eram marcados como "risky" (did not perform any assertions), pois o shim nao integra com o contador de assercoes do PHPUnit. expects() agora registra uma assercao. Resolve ~45 testes risky em Network, Controller, Error e View.
Configure::bootstrap() chamava _setErrorHandlers() duas vezes mas so restaurava o error handler entre as chamadas, deixando dois exception handlers na pilha. Adiciona restore_exception_handler() para manter a pilha limpa (1 handler ativo). ConfigureTest::testBootstrap agora restaura os handlers instalados pelo bootstrap.
parse_url() retorna false para URLs com parametros nomeados do CakePHP (ex.: /posts/index/page:1), fazendo _lastAction ficar vazio e quebrar o hash do token de seguranca. Substitui parse_url() por separacao manual de fragmento/query/host, preservando o comportamento anterior para URLs comuns.
I18n::clear() agora faz um reset completo: alem de esvaziar os dominios, zera o idioma resolvido e recria a instancia de L10n. Sem isso, o idioma padrao capturado no construtor de L10n ficava preso e, quando um teste anterior deixava Config.language definido, L10n::_setLanguage() usava esse valor obsoleto como fallback, traduzindo no idioma errado. I18nTest agora limpa Config.language e chama I18n::clear() no setUp/ tearDown. Resolve 45 falhas que so ocorriam ao rodar a suite inteira.
- setUp/tearDown limpam Config.language e chamam I18n::clear() para que o idioma de um teste anterior nao fique como default obsoleto do L10n e sobreponha o idioma pedido (mesma causa das falhas de I18nTest) - testNiceShortI18n aceita "ene" ou "ene." pois alguns sistemas abreviam janeiro em es_ES com ponto final
O teste faz define('DEFAULT_LANGUAGE', 'en-us'), constante que nao pode
ser removida e passava a ser o default permanente de toda instancia de
L10n criada depois no mesmo processo. Isso fazia idiomas explicitos sem
catalogo (time_test, etc.) serem substituidos por 'en-us', quebrando
CakeTimeTest na execucao da suite completa (CI roda tudo num processo
so). RunInSeparateProcess + PreserveGlobalState(false) contem o efeito.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.