【问题标题】:Run method after another actions在另一个动作之后运行方法
【发布时间】:2018-01-01 16:05:54
【问题描述】:

1。总结

我不明白,我怎么能在另一个动作之后运行 Python 方法。


2。文件

我的.py 文件示例:

# First test
for filename in first_folder:

    if "Sasha Great" in open(filename).read():
        log.debug(filename + " Done")
    else:
        print("First test failure for " + filename)

3。预期算法

3.1。测试通过

如果所有测试都通过,打印到控制台:

Test for all files successful passed

3.2.测试失败

如果,例如,我对SashaExample.txt 的一项测试失败:

  1. 打印First test failure for SashaExample.txt;
  2. 继续第一次测试其他文件;
    1. 如果有更多错误为First test failure for AnotherExample.txt,将错误打印到控制台并继续测试;
  3. exit(1) 运行所有测试后。

如果我使用 Travis CI 或 AppVeyor,我需要 exit(1),我可以看到我的测试中有错误。


4。没有帮助

4.1。在 else 之后退出(1)

如果

for filename in first_folder:

    if "Sasha Great" in open(filename).read():
        log.debug(filename + " Done")
    else:
        print("First test failure for " + filename)
        exit(1)

程序在第一次错误后结束。但我需要查看所有错误。

4.2。又一次尝试

  1. 我在 Google 中找不到如何解决我的问题;
  2. 我阅读了有关 Python 函数、方法的信息,atexit,但我不明白如何解决这个问题。

【问题讨论】:

  • 那些是单元测试还是集成测试?对于前一个,一个测试应该是原子的,它应该测试一件事,例如“文件夹很好”->(对或错)。 stackoverflow.com/a/235032/4621324 如果一个文件失败,那么“文件夹坏了”,检查其他文件没有多大意义。如果您真的想检查所有文件,您可以“自动生成”这些方法测试并一个接一个地运行,或者只是创建一个方法(不是测试),首先打印有关所有文件的“失败”信息,然后运行测试,这将在第一个问题后失败。
  • @Axalix:感谢您的评论。我的.py 文件检查了很多.txt 文件是否有错误,认为.txt 文件符合一项服务的规则。例如,它会检查文件中是否包含必填词——如示例所示。 // 如果我立即看到所有错误,我可以快速修复它们。我不认为,每次失败后退出程序 - 在我的情况下是一个好的行为。
  • @Axalix: If you really want to check all the files, you can "autogenerate" those methods-tests and run one after another or just make a method (not test) that will print "failing" info about all the files first and then run a test, that will fail after a first issue. — 现在警告和错误只打印到我的控制台,但测试仍被视为passed。我可以看到所有警告和错误。我还可以编写另一个.py 文件,每次失败后程序将以退出代码1 退出。该文件将在第一个文件之后运行。但是我会有很多重复的代码。谢谢。
  • @Axalix:我simplify example。谢谢。

标签: python python-3.x exit-code


【解决方案1】:

这是一个简单的编程概念,称为 FLAGS。谷歌一下,你会发现很简单。

all_passed = True
# First test
for filename in first_folder:

    if "Sasha Great" in open(filename).read():
        log.debug(filename + " Done")
    else:
        print("First test failure for " + filename)
        all_passed=False
        continue

if all_passed:
    print('All test passed')

【讨论】:

【解决方案2】:

问题似乎是如果出现任何故障,您需要在程序结束时调用exit(1)。如果是这种情况,您可以使用一个变量,比如failureFound,初始化为False(因为您还没有找到任何变量)并在您发现失败时设置为True。然后,在程序结束时,如果failureFound 为真,则调用exit(1)

【讨论】:

  • 不好意思,能不能加个例子或者链接,哪里可以看,怎么实现?谢谢。
  • 这其中哪一部分你不明白?您是如何尝试实施的,哪里出了问题?
猜你喜欢
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
相关资源
最近更新 更多