虽然我已经使用Python很多年了,但我意识到主要是在个人项目上工作,我以前从来不需要进行单元测试,所以对于我可能做出的明显的问题或错误的假设,我表示歉意。我的目标是了解如何进行测试,并可能将所有内容与GitHub工作流结合起来,以创建一些自动化。我已经看到在本地引发的失败/错误(在概念上是不同的),一旦联机,就不会被区别对待。但在我离开之前,我有一些疑问,我想澄清。
从网上阅读,我最初的理解似乎是,一个测试应该总是成功的,即使它包含错误或失败。但是如果它成功了,我怎么能记录一个失败或一个错误呢?所以我很想说我用错误的方式捕捉了这件事?我理解在敏捷环境中,有些人想说这是一个受控的过程,在查看代码时可以拦截错误。但我不确定这是最好的方法。
这就引出了第二个问题。
假设我有一个接受日期的函数,我知道它不能接受其他任何东西。
假设案例1)是一种最佳实践;在运行这些测试时,我应该做些什么?我应该让测试失败并得到一长串错误列表吗?或者我应该用一个@pytest.mark.xfail()来装饰函数(这是一种软失败,在这里我可以尝试.抓到)?
最后一个问题(就目前而言):xfail装饰器是否会让工作流自动化将测试视为“通过”。也许不会,但在这个阶段,我头脑中有太多的困惑,有经验的用户的任何清晰都会有所帮助。
谢谢你阅读的耐心。
发布于 2021-10-24 16:47:28
这个问题有点模糊,但我会有机会的。
因此,举几个例子:如果指定您的函数对无效输入引发异常,则必须使用类似于pytest.raises的方法进行测试--如果不引发异常,它将失败。如果您的函数将通过记录错误来处理无效日期,则测试将验证错误是否已记录下来。如果只应忽略无效的输入,则测试应确保不引发异常,且状态不会更改。
xfail,我只是向您介绍一下最热的文件,在这里很好地描述了这一点:xfail意味着您希望测试由于某种原因而失败。一个常见的例子是对一个尚未实现的特性的测试,或者一个尚未修复的bug。当测试通过时,尽管预期会失败(标记为pytest.mark.xfail),它是一个xpass,并将在测试摘要中报告。
因此,一个通过的xfail测试将显示为确实通过。您可以轻松地亲自测试:
import pytest
@pytest.mark.xfail
def test_fails():
assert False
@pytest.mark.xfail
def test_succeeds():
assert True给出了这样的东西:
============================= test session starts =============================
collecting ... collected 2 items
test_xfail.py::test_fails
test_xfail.py::test_succeeds
======================== 1 xfailed, 1 xpassed in 0.35s ========================测试被认为通过了(例如,退出代码为0)。
https://stackoverflow.com/questions/69681830
复制相似问题