首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在unittest中保留测试之间的变量更改?

在unittest中保留测试之间的变量更改?
EN

Stack Overflow用户
提问于 2014-01-30 12:19:26
回答 3查看 36.5K关注 0票数 49

如何在unitttest中持久化继承自TestCase的同一对象中所做的更改?

代码语言:javascript
复制
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()

即:我希望上面的两个测试都能通过

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-24 20:49:11

正如一些评论所回应的那样,以这种方式构建测试可能是测试本身的一个设计缺陷,您应该考虑重组它们。然而,如果你想这样做,并依赖于你正在使用的测试运行器按字母(似乎)顺序执行它们的事实,那么我建议如下。

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

代码语言:javascript
复制
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的答案之间的区别在于显式声明了类,而不是查找所述类引用。

代码语言:javascript
复制
TestSimpleFoo vs self.__class__

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

票数 66
EN

Stack Overflow用户

发布于 2014-07-18 18:01:36

我喜欢你自己的简单答案,但是如果你想保持不同的单元测试:

显然,unittest使用新的TestCase实例运行单独的测试。那么,只需要将对象绑定到除self之外的其他对象。例如:

代码语言:javascript
复制
from unittest import TestCase, main as unittest_main


class TestSimpleFoo(TestCase):

    def setUp(self):
        pass

    def test_a(self):
        TestSimpleFoo.foo = 'can'

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


if __name__ == '__main__':
    unittest_main()

您可能对setUpClass和tearDownClass也很感兴趣:https://docs.python.org/3/library/unittest.html#setupclass-and-teardownclass

还要注意单元测试的执行顺序:https://docs.python.org/2/library/unittest.html#unittest.TestLoader.sortTestMethodsUsing

票数 13
EN

Stack Overflow用户

发布于 2014-01-30 12:45:36

我不能弄清楚它;所以最终用多个非test_前缀函数解决了它:

代码语言:javascript
复制
def test_password_credentials_grant(self):
    for user in self.user_mocks:
        self.register(user)
        self.login(user)
        self.access_token(user, self.assertEqual)  # Ensures access_token is generated+valid
        self.logout(user)
        self.access_token(user, self.assertNotEqual)  # Ensures access_token is now invalid
        self.unregister(user)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21447740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档