当前位置: 首页 > 面试题库 >

在unittest的测试之间持久变量变化?

鞠泰平
2023-03-14
问题内容

如何保持TestCase在unitttest中继承的同一对象内所做的更改?

from unittest import TestCase, main as unittest_main


class TestSimpleFoo(TestCase):
    foo = 'bar'

    def setUp(self):
        pass

    def test_a(self):
        self.assertEqual(self.foo, 'bar')
        self.foo = 'can'

    def test_f(self):
        self.assertEqual(self.foo, 'can')


if __name__ == '__main__':
    unittest_main()

即:我希望以上两项测试通过


问题答案:

正如一些评论所回响的那样,以这种方式构造测试可能是测试本身的设计缺陷,您应该考虑对其进行重组。但是,如果您要执行此操作,并且依赖于所使用的测试运行程序以字母(看似)顺序执行它们的事实,那么我建议以下内容。

类似于@Matthias所说的,但是对于以后您可能决定从该类继承的情况,我会做不同的事情。

from unittest import TestCase, main as unittest_main


class TestSimpleFoo(TestCase):
    foo = 'bar'

    def setUp(self):
        pass

    def test_a(self):
        self.assertEqual(self.__class__.foo, 'bar')
        self.__class__.foo = 'can'

    def test_f(self):
        self.assertEqual(self.__class__.foo, 'can')


if __name__ == '__main__':
    unittest_main()

此答案与您接受的@Matthias答案之间的区别是类的显式声明与查找该类引用的区别。

TestSimpleFoo vs self.__class__

我更喜欢动态性,这样我以后就可以继承测试,并背对背运行两个测试类,并且两者之间没有任何交叉。因为如果您选择从此类继承,则显式命名类引用将导致两个测试类都针对该引用运行,而不是针对各自的类运行。



 类似资料:
  • 我试图捕捉表单的提交按钮,如果表单被提交,页面会刷新,我会显示一些隐藏的字段。我想捕捉表单之前是否提交过,如果它在重新加载时提交,我想取消隐藏的字段。我试图使用一个全局变量来实现这一点,但我无法使它正常工作。 以下是我所尝试的: 关于这个代码有什么问题,有什么建议吗?

  • 我正在使用一个用Groovy编写的Spock测试来测试一些Java代码。我使用JMockit来模拟java代码中的方法,因为Spock只处理模拟Groovy类。我遇到了一个问题,在测试之间存在一个JMockit。这样的模拟实例应该只存在于测试中(根据JMockit文档),但这不起作用,我想这是因为它没有使用JMockit测试运行器,而是使用了Spock测试运行器。 问题 有什么方法可以手动移除JM

  • 问题内容: 我正在尝试捕获表单的“提交”按钮,如果表单已提交,页面将刷新,并显示一些隐藏的字段。我想捕获表单是否已经提交过,以及是否在重新加载时提交,我想取消隐藏隐藏字段。我试图使用全局变量来实现此目的,但是我无法使其正常运行。 这是我尝试过的: 关于此代码有什么问题的任何建议? 问题答案: 由于HTTP是无状态的,因此每次加载页面时,它将使用JavaScript中设置的初始值。您不能在JS中设置

  • 问题内容: 有什么方法可以将结果变量保留在内存中,因此我不必每次运行脚本的开头都重新计算它?每次运行脚本时,我都会对数据集(从磁盘上读取)进行一系列(5-10秒)的确切操作。这不会有太大问题,因为我非常擅长使用交互式编辑器在两次运行之间调试代码。但是有时交互功能只是不切实际。 我知道我可以将结果写到磁盘上的文件中,但是如果可能的话,我想避免这样做。这应该是一个解决方案,它在我第一次运行脚本时会生成

  • 问题内容: 我正在尝试使用Go OS 在机器上设置一些环境变量 似乎该变量可用于Go程序,但是一旦我完全终止了Go进程,该变量就不再可用。我想知道是否可以永久设置这些变量。原因是我希望为本地和开发环境创建一个带有配置文件(数据库名称等)的“安装程序”文件,以便我可以在根本不进行任何设置的情况下进行切换…只需运行一次setup.go 。 问题答案: 简短:不可能。您不能更改父进程的环境。您只能更改自

  • 问题内容: 我已经在Python的Stack Exchange上阅读了很多答案,为什么在类中使用“ self”? 阅读这些答案后,我了解到实例变量对于该类的每个实例都是唯一的,而在所有实例之间共享类变量。 在玩耍时,我发现这段代码给出了输出: 但是,此代码作为输出,在我看来应为: 为什么我运行时类变量没有更新?我没有编程方面的经验,所以请原谅。 问题答案: 类变量 被 实例属性 遮盖 。这意味着在