python - 在类之间使用相同的变量和持续的单元测试
问题描述
我有一半希望有人将此标记为重复,但如果是,我找不到相关问题。
我有一个情况,我有 2 个测试类,其中 ClassA 需要设置 x,而 ClassB 重用设置 x,但还有一个额外的步骤 y。
import my_module as m
class TestClassA(unittest.TestCase):
def setUp()
self.a = 1
self.b = 2
self.c = 3
self.d = m.initialiase_function(self.a, self.b, self.c)
def test1(self)
pass
def test2(self)
pass
class TestClassB(unittest.TestCase):
def setUp():
self.a = 1
self.b = 2
self.c = 3
self.d = m.initialise_function(self.a, self.b, self.c)
m.complete_function(self.c)
def test3(self):
pass
def test4(self):
pass
我尝试过使用setUpModule()
,但这只是意味着我global
在每个测试类中也需要大量语句,而且这似乎也不是正确的“pythoninc”做事方式。
我还尝试将所有测试放在同一个类中,因此他们从 共享设置,然后作为 的一部分ClassA
调用,但是我的测试无法运行。m.complete_function()
test3
在这种特殊情况下,进行两次设置和拆卸可能不是很大的开销,但我也想找出“正确”的方法以供将来参考。
解决方案
很简单:将通用代码分解出来,使其位于一个单独的函数中,然后self
从每个方法中调用它(如果适合您的情况,可以使用作为参数和稍微不同的配置选项)setUp()
。这样可以避免重复定义。
如果你还想重用你创建的状态,你需要一个共享命名空间中的变量来存储创建的状态。通常这将是一个单例,附加在模块级别或一些常见的超类上;但您也可以设置一些注册表对象来保存引用,这样您就可以同时拥有多个实例。但是,根据我的经验,每个测试通常都会进行自己的设置,即使这意味着重复工作,以确保“夹具”没有被早期测试无意中修改。
推荐阅读
- c# - 约 6 小时后,计时器未在控制台应用程序中触发
- android - 如何解决此问题 使用参数执行 c:\Users\user\...\cmake.exe 时出错 {-HF:\My Project\app\sr.......-DANDROID_TOOLCHAIN=clang}
- html - 如何让边框进入网页的角落?
- android - 如何更改 AOSP 中的音量增益?
- android - Scrollview -> Relativelayout -> TabLayout 不滚动整个布局
- haskell - 从 Common Lisp (SBCL) 调用 Haskell
- javascript - VueJS 中如何实现“双击编辑 todo 任务”?
- ruby-on-rails - 在 Rails 中创建 FAQ 部分的最佳方法
- java - flyway中baseline和baselineOnMigrate之间的区别?
- meteor - Meteor --production 没有运行客户端文件夹中的文件