From 86eb1e90d393400f94f912e563ec2d9c633c749d Mon Sep 17 00:00:00 2001 From: Nikolay Gagarinov Date: Thu, 2 Jul 2026 16:40:28 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B=20=D1=81?= =?UTF-8?q?=D1=82=D1=83=D0=B4=D0=B5=D0=BD=D1=82=D0=B0=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8=20=C2=AB=D0=B2=D1=8B=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Тесты перехватывали stdout студента фикстурой capsys и readouterr() поглощал его, нигде не перепечатывая. В связке с pytest -q на панели «вывод» при успехе оставалась только точка «.». Теперь после readouterr() вывод переиздаётся через `with capsys.disabled(): print(out)` — под --capture=no он идёт в реальный stdout и попадает на панель. assert выполняется после печати, поэтому вывод виден и при провале теста. Хелпер expect_output встроен прямо в файл теста (урок самодостаточен). Затронут 41 файл test_solution.py (уроки, где решение печатает вывод). Функциональные уроки без print не менялись. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../10-basics/10-hello-world/test_solution.py | 18 ++++++++++++++---- .../10-basics/30-instructions/test_solution.py | 18 ++++++++++++++---- modules/10-basics/40-testing/test_solution.py | 18 ++++++++++++++---- .../50-syntax-errors/test_solution.py | 18 ++++++++++++++---- .../20-arithmetics/20-basic/test_solution.py | 18 ++++++++++++++---- .../25-operator/test_solution.py | 18 ++++++++++++++---- .../27-commutativity/test_solution.py | 18 ++++++++++++++---- .../30-composition/test_solution.py | 18 ++++++++++++++---- .../40-priority/test_solution.py | 18 ++++++++++++++---- .../20-arithmetics/43-float/test_solution.py | 18 ++++++++++++++---- .../20-arithmetics/45-linting/test_solution.py | 18 ++++++++++++++---- modules/25-strings/10-quotes/test_solution.py | 18 ++++++++++++++---- .../15-escape-characters/test_solution.py | 18 ++++++++++++++---- .../20-string-concatenation/test_solution.py | 18 ++++++++++++++---- .../25-strings/30-encoding/test_solution.py | 18 ++++++++++++++---- .../10-definition/test_solution.py | 18 ++++++++++++++---- .../30-variables/12-change/test_solution.py | 18 ++++++++++++++---- .../13-variables-naming/test_solution.py | 18 ++++++++++++++---- .../15-variables-expressions/test_solution.py | 18 ++++++++++++++---- .../18-variable-concatenation/test_solution.py | 18 ++++++++++++++---- .../19-naming-style/test_solution.py | 18 ++++++++++++++---- .../20-magic-numbers/test_solution.py | 18 ++++++++++++++---- .../25-interpolation/test_solution.py | 18 ++++++++++++++---- .../30-symbols/test_solution.py | 18 ++++++++++++++---- .../70-slices/test_solution.py | 18 ++++++++++++++---- .../90-multiline-strings/test_solution.py | 18 ++++++++++++++---- .../40-primitive-data-types/test_solution.py | 18 ++++++++++++++---- .../33-data-types/45-tuples/test_solution.py | 17 +++++++++++++---- .../50-strong-typing/test_solution.py | 18 ++++++++++++++---- .../test_solution.py | 18 ++++++++++++++---- .../55-data-types-casting/test_solution.py | 18 ++++++++++++++---- .../100-call/test_solution.py | 18 ++++++++++++++---- .../test_solution.py | 18 ++++++++++++++---- .../test_solution.py | 18 ++++++++++++++---- .../180-variadic-parameters/test_solution.py | 18 ++++++++++++++---- .../270-deterministic/test_solution.py | 11 ++++++++--- .../38-objects/100-objects/test_solution.py | 18 ++++++++++++++---- .../200-methods-immutability/test_solution.py | 18 ++++++++++++++---- .../500-method-chain/test_solution.py | 18 ++++++++++++++---- .../100-define-function/test_solution.py | 9 +++++++-- modules/50-loops/10-while/test_solution.py | 14 ++++++++++++-- 41 files changed, 558 insertions(+), 159 deletions(-) diff --git a/modules/10-basics/10-hello-world/test_solution.py b/modules/10-basics/10-hello-world/test_solution.py index 725b9031..910d843c 100644 --- a/modules/10-basics/10-hello-world/test_solution.py +++ b/modules/10-basics/10-hello-world/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "Hello, World!" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/10-basics/30-instructions/test_solution.py b/modules/10-basics/30-instructions/test_solution.py index 784c8277..3c2803a9 100644 --- a/modules/10-basics/30-instructions/test_solution.py +++ b/modules/10-basics/30-instructions/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "Заказ №1337\nСтатус: доставляется\nПримерный срок: 2 дня" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/10-basics/40-testing/test_solution.py b/modules/10-basics/40-testing/test_solution.py index 2e8d2446..45b47219 100644 --- a/modules/10-basics/40-testing/test_solution.py +++ b/modules/10-basics/40-testing/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "10" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/10-basics/50-syntax-errors/test_solution.py b/modules/10-basics/50-syntax-errors/test_solution.py index db0315d0..22e7cb98 100644 --- a/modules/10-basics/50-syntax-errors/test_solution.py +++ b/modules/10-basics/50-syntax-errors/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "Программа успешно запущена" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/20-arithmetics/20-basic/test_solution.py b/modules/20-arithmetics/20-basic/test_solution.py index 3ea326fb..c2f4491d 100644 --- a/modules/20-arithmetics/20-basic/test_solution.py +++ b/modules/20-arithmetics/20-basic/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "9.0" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/20-arithmetics/25-operator/test_solution.py b/modules/20-arithmetics/25-operator/test_solution.py index e70ccf60..08adb61d 100644 --- a/modules/20-arithmetics/25-operator/test_solution.py +++ b/modules/20-arithmetics/25-operator/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "87\n29.0" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/20-arithmetics/27-commutativity/test_solution.py b/modules/20-arithmetics/27-commutativity/test_solution.py index 0cbe706e..4e8db043 100644 --- a/modules/20-arithmetics/27-commutativity/test_solution.py +++ b/modules/20-arithmetics/27-commutativity/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "256\n3.0" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/20-arithmetics/30-composition/test_solution.py b/modules/20-arithmetics/30-composition/test_solution.py index 3c230772..ebdc9b92 100644 --- a/modules/20-arithmetics/30-composition/test_solution.py +++ b/modules/20-arithmetics/30-composition/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "660" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/20-arithmetics/40-priority/test_solution.py b/modules/20-arithmetics/40-priority/test_solution.py index 7662d769..01377ddd 100644 --- a/modules/20-arithmetics/40-priority/test_solution.py +++ b/modules/20-arithmetics/40-priority/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "160.0" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/20-arithmetics/43-float/test_solution.py b/modules/20-arithmetics/43-float/test_solution.py index 890bd8ab..198ece18 100644 --- a/modules/20-arithmetics/43-float/test_solution.py +++ b/modules/20-arithmetics/43-float/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "0.30000000000000004" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/20-arithmetics/45-linting/test_solution.py b/modules/20-arithmetics/45-linting/test_solution.py index 320b4f2e..306f9f72 100644 --- a/modules/20-arithmetics/45-linting/test_solution.py +++ b/modules/20-arithmetics/45-linting/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "4" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/25-strings/10-quotes/test_solution.py b/modules/25-strings/10-quotes/test_solution.py index 3d2cc293..be5b1c72 100644 --- a/modules/25-strings/10-quotes/test_solution.py +++ b/modules/25-strings/10-quotes/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = 'The file "user\'s_config.json" was not found.' - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/25-strings/15-escape-characters/test_solution.py b/modules/25-strings/15-escape-characters/test_solution.py index cdff2c9d..9e5bd47e 100644 --- a/modules/25-strings/15-escape-characters/test_solution.py +++ b/modules/25-strings/15-escape-characters/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = 'Для разделения строк используйте "\\n"\nПример: print("строка1\\nстрока2")' - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/25-strings/20-string-concatenation/test_solution.py b/modules/25-strings/20-string-concatenation/test_solution.py index 6c7a1177..17d5204e 100644 --- a/modules/25-strings/20-string-concatenation/test_solution.py +++ b/modules/25-strings/20-string-concatenation/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "https://github.com/hexlet/exercises-python" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/25-strings/30-encoding/test_solution.py b/modules/25-strings/30-encoding/test_solution.py index ef060401..7adec5f3 100644 --- a/modules/25-strings/30-encoding/test_solution.py +++ b/modules/25-strings/30-encoding/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "~\n^\n%" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/30-variables/10-definition/test_solution.py b/modules/30-variables/10-definition/test_solution.py index 05d469e2..bde21154 100644 --- a/modules/30-variables/10-definition/test_solution.py +++ b/modules/30-variables/10-definition/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "https://hexlet.io\nhttps://hexlet.io" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/30-variables/12-change/test_solution.py b/modules/30-variables/12-change/test_solution.py index dd536185..c4b5b337 100644 --- a/modules/30-variables/12-change/test_solution.py +++ b/modules/30-variables/12-change/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "доставлен" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/30-variables/13-variables-naming/test_solution.py b/modules/30-variables/13-variables-naming/test_solution.py index 1c50706e..872ca98f 100644 --- a/modules/30-variables/13-variables-naming/test_solution.py +++ b/modules/30-variables/13-variables-naming/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "2" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/30-variables/15-variables-expressions/test_solution.py b/modules/30-variables/15-variables-expressions/test_solution.py index db023cf4..0222e0c3 100644 --- a/modules/30-variables/15-variables-expressions/test_solution.py +++ b/modules/30-variables/15-variables-expressions/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "125.0\n863.75" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/30-variables/18-variable-concatenation/test_solution.py b/modules/30-variables/18-variable-concatenation/test_solution.py index b8e5cf5f..16485df3 100644 --- a/modules/30-variables/18-variable-concatenation/test_solution.py +++ b/modules/30-variables/18-variable-concatenation/test_solution.py @@ -1,10 +1,20 @@ -import runpy +import importlib def test(capsys): expected = """Здравствуйте, Анна! Спасибо за ваш заказ. Ожидаемая дата доставки — 3 рабочих дня.""" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/30-variables/19-naming-style/test_solution.py b/modules/30-variables/19-naming-style/test_solution.py index 3f99d0db..a5025111 100644 --- a/modules/30-variables/19-naming-style/test_solution.py +++ b/modules/30-variables/19-naming-style/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "2000" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/30-variables/20-magic-numbers/test_solution.py b/modules/30-variables/20-magic-numbers/test_solution.py index 4c6a469c..505af438 100644 --- a/modules/30-variables/20-magic-numbers/test_solution.py +++ b/modules/30-variables/20-magic-numbers/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "Ящиков на складе:\n102" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/31-advanced-strings/25-interpolation/test_solution.py b/modules/31-advanced-strings/25-interpolation/test_solution.py index 7708e146..f2a4c6de 100644 --- a/modules/31-advanced-strings/25-interpolation/test_solution.py +++ b/modules/31-advanced-strings/25-interpolation/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "Здравствуйте, Анна! Ваш заказ #1337 принят." - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/31-advanced-strings/30-symbols/test_solution.py b/modules/31-advanced-strings/30-symbols/test_solution.py index f3641ed2..47aceaef 100644 --- a/modules/31-advanced-strings/30-symbols/test_solution.py +++ b/modules/31-advanced-strings/30-symbols/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "grip" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/31-advanced-strings/70-slices/test_solution.py b/modules/31-advanced-strings/70-slices/test_solution.py index 672361d6..8e5106f5 100644 --- a/modules/31-advanced-strings/70-slices/test_solution.py +++ b/modules/31-advanced-strings/70-slices/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "hexlet.io" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/31-advanced-strings/90-multiline-strings/test_solution.py b/modules/31-advanced-strings/90-multiline-strings/test_solution.py index 09b2b5b6..a9d44b84 100644 --- a/modules/31-advanced-strings/90-multiline-strings/test_solution.py +++ b/modules/31-advanced-strings/90-multiline-strings/test_solution.py @@ -1,4 +1,4 @@ -import runpy +import importlib def test(capsys): @@ -6,6 +6,16 @@ def test(capsys): Ваш заказ успешно оформлен. Ожидаемая дата доставки: 3-5 рабочих дней. Спасибо, что выбрали нас!""" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/33-data-types/40-primitive-data-types/test_solution.py b/modules/33-data-types/40-primitive-data-types/test_solution.py index 962ca477..70ab3e0c 100644 --- a/modules/33-data-types/40-primitive-data-types/test_solution.py +++ b/modules/33-data-types/40-primitive-data-types/test_solution.py @@ -1,4 +1,4 @@ -import runpy +import importlib def test(capsys): @@ -6,6 +6,16 @@ def test(capsys): Birth year: 1994 Age: 32 Rating: 4.7""" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/33-data-types/45-tuples/test_solution.py b/modules/33-data-types/45-tuples/test_solution.py index d0bf80c6..dfe0b75f 100644 --- a/modules/33-data-types/45-tuples/test_solution.py +++ b/modules/33-data-types/45-tuples/test_solution.py @@ -1,11 +1,20 @@ -import runpy +import importlib def test(capsys): expected = """From: Moscow To: Saint Petersburg Distance: 634 km""" + expect_output(capsys, expected) - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/33-data-types/50-strong-typing/test_solution.py b/modules/33-data-types/50-strong-typing/test_solution.py index acc519c8..3ce339f9 100644 --- a/modules/33-data-types/50-strong-typing/test_solution.py +++ b/modules/33-data-types/50-strong-typing/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "13" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/33-data-types/52-data-types-immutability/test_solution.py b/modules/33-data-types/52-data-types-immutability/test_solution.py index a32aa536..e1f48a7b 100644 --- a/modules/33-data-types/52-data-types-immutability/test_solution.py +++ b/modules/33-data-types/52-data-types-immutability/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "print" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/33-data-types/55-data-types-casting/test_solution.py b/modules/33-data-types/55-data-types-casting/test_solution.py index c5a4a923..9c8a1c6c 100644 --- a/modules/33-data-types/55-data-types-casting/test_solution.py +++ b/modules/33-data-types/55-data-types-casting/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "36 °C" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/35-calling-functions/100-call/test_solution.py b/modules/35-calling-functions/100-call/test_solution.py index 05acb20c..dac14dd1 100644 --- a/modules/35-calling-functions/100-call/test_solution.py +++ b/modules/35-calling-functions/100-call/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "12" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/35-calling-functions/135-calling-functions-default-params/test_solution.py b/modules/35-calling-functions/135-calling-functions-default-params/test_solution.py index 9efb5122..2597a7e3 100644 --- a/modules/35-calling-functions/135-calling-functions-default-params/test_solution.py +++ b/modules/35-calling-functions/135-calling-functions-default-params/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "37.8\n2426.76\n607" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/35-calling-functions/150-calling-functions-expression/test_solution.py b/modules/35-calling-functions/150-calling-functions-expression/test_solution.py index 5bbe4eab..93f8a7d4 100644 --- a/modules/35-calling-functions/150-calling-functions-expression/test_solution.py +++ b/modules/35-calling-functions/150-calling-functions-expression/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "First: H\nLast: !" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/35-calling-functions/180-variadic-parameters/test_solution.py b/modules/35-calling-functions/180-variadic-parameters/test_solution.py index e2a4f846..8423df89 100644 --- a/modules/35-calling-functions/180-variadic-parameters/test_solution.py +++ b/modules/35-calling-functions/180-variadic-parameters/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "-3" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/35-calling-functions/270-deterministic/test_solution.py b/modules/35-calling-functions/270-deterministic/test_solution.py index 3f3a66a0..35df2049 100644 --- a/modules/35-calling-functions/270-deterministic/test_solution.py +++ b/modules/35-calling-functions/270-deterministic/test_solution.py @@ -1,4 +1,4 @@ -import runpy +import importlib def check(output): @@ -9,6 +9,11 @@ def check(output): def test(capsys): - runpy.run_module('solution') + importlib.import_module('solution') out, _ = capsys.readouterr() - check(out.strip()) + + with capsys.disabled(): + print('\n') + print(out) + + check(out.strip('\n')) diff --git a/modules/38-objects/100-objects/test_solution.py b/modules/38-objects/100-objects/test_solution.py index 65369a8b..cd4570ff 100644 --- a/modules/38-objects/100-objects/test_solution.py +++ b/modules/38-objects/100-objects/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "the quick brown fox jumps over the lazy dog" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/38-objects/200-methods-immutability/test_solution.py b/modules/38-objects/200-methods-immutability/test_solution.py index a3068beb..ebcf3618 100644 --- a/modules/38-objects/200-methods-immutability/test_solution.py +++ b/modules/38-objects/200-methods-immutability/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "Grigor" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/38-objects/500-method-chain/test_solution.py b/modules/38-objects/500-method-chain/test_solution.py index b2549220..0e9455fd 100644 --- a/modules/38-objects/500-method-chain/test_solution.py +++ b/modules/38-objects/500-method-chain/test_solution.py @@ -1,8 +1,18 @@ -import runpy +import importlib def test(capsys): expected = "7" - runpy.run_module('solution') - out, _ = capsys.readouterr() - assert out.strip() == expected + expect_output(capsys, expected) + + +def expect_output(capsys, expected): + importlib.import_module('solution') + out, _err = capsys.readouterr() + actual = out.strip('\n') + + with capsys.disabled(): + print('\n') + print(out) + + assert actual == expected diff --git a/modules/40-define-functions/100-define-function/test_solution.py b/modules/40-define-functions/100-define-function/test_solution.py index 42f4f15c..bce214d0 100644 --- a/modules/40-define-functions/100-define-function/test_solution.py +++ b/modules/40-define-functions/100-define-function/test_solution.py @@ -2,7 +2,12 @@ def test(capsys): - solution.say_hello() expected = "Hello, World!" + solution.say_hello() out, _ = capsys.readouterr() - assert out.strip() == expected + + with capsys.disabled(): + print('\n') + print(out) + + assert out.strip('\n') == expected diff --git a/modules/50-loops/10-while/test_solution.py b/modules/50-loops/10-while/test_solution.py index 405950fc..a03a2739 100644 --- a/modules/50-loops/10-while/test_solution.py +++ b/modules/50-loops/10-while/test_solution.py @@ -4,10 +4,20 @@ def test1(capsys): solution.print_countdown(2) out, _ = capsys.readouterr() - assert out.strip() == "2\n1\nGo!" + + with capsys.disabled(): + print('\n') + print(out) + + assert out.strip('\n') == "2\n1\nGo!" def test2(capsys): solution.print_countdown(4) out, _ = capsys.readouterr() - assert out.strip() == "4\n3\n2\n1\nGo!" + + with capsys.disabled(): + print('\n') + print(out) + + assert out.strip('\n') == "4\n3\n2\n1\nGo!"