gpt4 book ai didi

Python单元测试: setUpClass uses a non-static method

转载 作者:行者123 更新时间:2023-11-30 23:37:23 24 4
gpt4 key购买 nike

我是Python的初学者,开始用Python设计一个单元测试,我需要在运行测试类之前向服务器发布一些消息(因为它会搜索它们)。因此我需要调用一个非静态方法 postMessages()

我收到的错误的堆栈跟踪是这样的 -

    Error
Traceback (most recent call last):
File ".../TestMsgs.py", line 23, in setUpClass
instance = cls()
File ".../python2.7/unittest/case.py", line 191, in __init__
(self.__class__, methodName))
ValueError: no such test method in <class 'TestMsgs.TestMsgs'>: runTest

我的代码中有这样的内容:

class A(object):

def postMessages(self):
print "i post messages in the server!"

class B(A):

@classmethod
def setUpClass(cls):
cls.foo() # should post messages for the tests in the class to work on

目前没有选项可以使 foo 静态化。我如何在 postMessages() 中实例化 B(或 A,就此而言)以便我可以在 setUpClass() 中使用它?

最佳答案

在阅读了 TestCase 的 __init__ 方法后,我发现您需要为其提供一个测试方法名称。默认值为“runTest”,这就是弹出该错误的原因。

import unittest 

class A(unittest.TestCase):

def postMessages(self):
print "i post messages in the server!"

class B(A):

@classmethod
def setUpClass(cls):
cls.foo(cls(methodName='test_method')) # should post messages for the tests in the class to work on

def foo(self):
self.postMessages()

def test_method(self):
pass


B.setUpClass()

您可以看到它在 interactive Python console here 中运行。它将打印出“我在服务器中发布消息!”

需要在类中传入有效方法名的原因可以在 source code for unittest 中清楚地看到:

class TestCase: 
"""A class whose instances are single test cases."""

def __init__(self, methodName='runTest'):
"""Create an instance of the class that will use the named test
method when executed. Raises a ValueError if the instance does
not have a method with the specified name.
"""
try:
self._testMethodName = methodName
testMethod = getattr(self, methodName)
self._testMethodDoc = testMethod.__doc__
except AttributeError:
raise ValueError, "no such test method in %s: %s" % \
(self.__class__, methodName)

如果您想将参数传递给刚刚传入的方法,那么您需要执行类似的操作

class A(unittest.TestCase):

def foo(self, arg1):
pass

a = A(methodName='foo')
a.foo('an_argument')

但这整个问题感觉非常错误。您应该重构而不是让静态方法调用实例方法。这太愚蠢了。

关于Python单元测试: setUpClass uses a non-static method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15612665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com