AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79181238
Accepted
OrenIshShalom
OrenIshShalom
Asked: 2024-11-12 21:08:26 +0800 CST2024-11-12 21:08:26 +0800 CST 2024-11-12 21:08:26 +0800 CST

Chamando seletivamente funções de teste com capsys

  • 772

Posso executar seletivamente test_function_1, substituindo a instrumentação dos meus conftest.pyacessórios 1

def test_function_1(instrumentation: dict[str, float]) -> None:
    assert instrumentation['a'] > instrumentation['b']

def test_function_2(capsys) -> None:
    print("Hello, pytest!")
    captured = capsys.readouterr()
    assert captured.out == "Hello, pytest!\n"

quando tento chamar test_function_2, não sei como passar capsyspara ele 2 :

import tests
import pytest # <--- doesn't help ...

def test_callee_with_instrumentation():
    tests.test_function_1({'a': 110, 'b': 55, 'g': 6000})

def test_callee_with_capsys():
    # tests.test_function_2()              # <--- TypeError: test_function_2() missing 1 required positional argument: 'capsys'
    # tests.test_function_2(capsys)        # <--- NameError: name 'capsys' is not defined 
    # tests.test_function_2(pytest.capsys) # <--- AttributeError: module 'pytest' has no attribute 'capsys'
    pass

test_callee_with_instrumentation()
test_callee_with_capsys()

Tenho quase certeza de que os conftest.pyjogos são irrelevantes, mas para completar:

import pytest

@pytest.fixture(scope='function')
def instrumentation():
    return { 'a': 800, 'b': 620, 'c': 44 }

1 No meu código real, o capsysé um dos muitos parâmetros.

2 Uma pergunta semelhante existe aqui . Não é uma duplicata IMHO, porque estou perguntando sobre testes de execução programática , e não sobre o significado apropriado de capsys.

python
  • 2 2 respostas
  • 40 Views

2 respostas

  • Voted
  1. Best Answer
    MT0
    2024-11-12T22:12:11+08:002024-11-12T22:12:11+08:00

    capsysé um acessório do PyTest.

    Você pode listar todos os equipamentos usando:

    pytest --fixtures
    

    O código-fonte pode ser encontrado em _pytest/capture.py. (Observação: você não deve tentar instanciar/chamar o dispositivo diretamente .)

    Escreva sua função com um argumento:

    import tests
    
    def test_callee_with_instrumentation():
        tests.test_function_1({'a': 110, 'b': 55, 'g': 6000})
    
    def test_callee_with_capsys(capsys):
        tests.test_function_2(capsys)
    

    Em seguida, execute pytest your_test_file.pye o PyTest instanciará automaticamente o dispositivo e o passará para o teste.


    Se você não quiser usar o PyTest para executar os testes, não tente capsyscapturar a saída padrão.

    from contextlib import redirect_stdout
    from io import StringIO
    
    def test_function_1(instrumentation) -> None:
        assert instrumentation['a'] > instrumentation['b']
    
    def test_function_2() -> None:
        with redirect_stdout(StringIO()) as f:
            print("Hello, pytest!")
        captured = f.getvalue()
        assert captured == "Hello, pytest!\n"
    
    

    Se você quiser usar o PyTest, mas não quiser chamá-lo diretamente do console, chame-o pytest.main()de dentro do seu código:

    import tests
    
    def test_callee_with_instrumentation():
        tests.test_function_1({'a': 110, 'b': 55, 'g': 6000})
    
    def test_callee_with_output(capsys):
        tests.test_function_2(capsys)
    
    if __name__ == "__main__":
        import pytest
        pytest.main()
    
    • 1
  2. OrenIshShalom
    2024-11-13T14:19:03+08:002024-11-13T14:19:03+08:00

    Se alguém quiser executar seletivamente apenas alguns testes, e se o arquivo subjacente tiver um nome arbitrário, os seguintes ajustes nos pytest.mainargumentos podem ser úteis:

    import tests
    import pytest
    
    def test_callee_with_instrumentation():
        tests.test_function_1({'a': 110, 'b': 55, 'g': 6000})
    
    def test_callee_with_capsys(capsys):
        tests.test_function_2(capsys)
    
    if __name__ == "__main__":
        import pytest
        pytest.main([
            '-k',
            'callee_with_capsys', # <--- selectively run just a single test
            '--override-ini',
            f'python_files={__file__}' # <--- collect just this file !
        ])
    

    Então, quando você executa o script com python(não pytest):

    (BBB) orenishshalom BBB % python main.py 
    =============================================================== test session starts ================================================================
    platform darwin -- Python 3.13.0, pytest-8.3.3, pluggy-1.5.0
    rootdir: /Users/orenishshalom/Downloads/BBB
    collected 2 items / 1 deselected / 1 selected                                                                                                      
    
    main.py .                                                                                                                                    [100%]
    
    ========================================================= 1 passed, 1 deselected in 0.01s ==========================================================
    

    1 Vindo de um contexto databricks, ainda tenho dificuldade, pois __file__não é definido ao executar uma célula... arrggghh...

    • 0

relate perguntas

  • Como divido o loop for em 3 quadros de dados individuais?

  • Como verificar se todas as colunas flutuantes em um Pandas DataFrame são aproximadamente iguais ou próximas

  • Como funciona o "load_dataset", já que não está detectando arquivos de exemplo?

  • Por que a comparação de string pandas.eval() retorna False

  • Python tkinter/ ttkboostrap dateentry não funciona quando no estado somente leitura

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve