这是一个简单的单元测试:
@pytest.mark.parametrize(
"card, expected",
[
(
Sneeze(),
"+---------------------+ \n| Sneeze | \n|---------------------| \n| Suit: Accident | \n| Rank: Jack | \n| Energy_cost: 1 | \n| Damage: 1 | \n| | \n|---------------------| \n| Achoo! | \n+---------------------+ \n",
),
(
ThrowCard(),
"+---------------------+ \n| Card Throw | \n|---------------------| \n| Suit: Attack | \n| Rank: Jack | \n| Energy_cost: 2 | \n| Damage: 2 | \n| | \n|---------------------| \n| Ricky Jay? | \n+---------------------+ \n",
),
],
)
def test_display_cards(capsys, card, expected):
testdeck = [card]
display_cards(testdeck)
captured = capsys.readouterr()
assert captured.out == expected
300 个字符串有点笨重,flake8 也同意。但是,如果我使用通常的方法将其拆分:
@pytest.mark.parametrize(
"card, expected",
[
(
Sneeze(),
'''
+---------------------+
| Sneeze |
|---------------------|
| Suit: Accident |
| Rank: Jack |
| Energy_cost: 1 |
| Damage: 1 |
| |
|---------------------|
| Achoo! |
+---------------------+''',
@pytest.mark.parametrize(
"card, expected",
[
(
Sneeze(),
"+---------------------+ \n| \
Sneeze | \n|---------------------| \
\n| Suit: Accident | \n| Rank: \
Jack | \n| Energy_cost: 1 | \n| Damage: \
1 | \n| | \n|---------------------| \n| \
Achoo! | \n+---------------------+ \n",
),
这两个在技术上都不属于“完全相同”的相同字符串,并且测试失败。我该怎么办? 这个方法也行不通
如何将长字符串的定义拆分为多行?
@pytest.mark.parametrize(
"card, expected",
[
(
Sneeze(),
("+---------------------+ "
"| Sneeze | "
"|---------------------| "
"| Suit: Accident | "
"| Rank: Jack | "
"| Energy_cost: 1 | "
"| Damage: 1 | "
"| | "
"|---------------------| "
"| Achoo! | "
"+---------------------+ \n"),
),
最终代码:
@pytest.mark.parametrize(
"card, expected",
[
(
Sneeze(),
("+---------------------+ \n"
"| Sneeze | \n"
"|---------------------| \n"
"| Suit: Accident | \n"
"| Rank: Jack | \n"
"| Energy_cost: 1 | \n"
"| Damage: 1 | \n"
"| | \n"
"|---------------------| \n"
"| Achoo! | \n"
"+---------------------+ \n"),
),
测试通过