DataBricks Python 需要单元测试错误帮助
DataBricks Python unit test error help needed
我在 DataBricks 中进行单元测试时遇到问题。我还没有发现任何类似的错误信息。有人可以帮我吗?
下面你可以找到我的代码:
import unittest
def add(n1, n2):
a = n1+n2
return a
class addTest(unittest.TestCase):
def test_add(self):
self.assertEqual(add(5,5), 10)
unittest.main()
错误信息是这样的:
EEEEEEEE
======================================================================
ERROR: 36941 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '36941'
======================================================================
ERROR: 0 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '0'
======================================================================
ERROR: 50000 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '50000'
======================================================================
ERROR: 923 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '923'
======================================================================
ERROR: dcc9864f9b334f05b20e25d63062f770 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute 'dcc9864f9b334f05b20e25d63062f770'
======================================================================
ERROR: 3 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '3'
======================================================================
ERROR: 4b8784f2c9e2dd8ccd5890b026495bf12fc0671c88baa508721606e240ca39b2 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '4b8784f2c9e2dd8ccd5890b026495bf12fc0671c88baa508721606e240ca39b2'
======================================================================
ERROR: unpinned (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute 'unpinned'
有人可以帮助我吗?谢谢!
unittest.main
包在使用 Databricks 时需要特殊处理。使用 Databricks 的主要要求是在 unittest.main
函数的参数列表中设置 exit = False
。将 argv
作为单元素列表显式传递也是有意义的,以避免使用 Databricks 上包含用于启动 Python 子进程的参数的 sys.argv
。 (参见 documentation on unittest.main
)。
但它也可能无法按预期工作。我通常通过自己进行自动发现并执行它来生成测试套件。例如使用以下代码:
import unittest
def discover_test_cases(*test_classes):
suite = unittest.TestSuite()
for test_class in test_classes:
for test in unittest.defaultTestLoader.getTestCaseNames(test_class):
suite.addTest(test_class(test))
return suite
def discover_test_classes():
classes = [obj for name, obj in globals().items()
if name.endswith('Test') and
obj.__module__ == '__main__' and
isinstance(obj, type) and
unittest.case.TestCase in set(obj.__bases__)]
return discover_test_cases(*classes)
它被用作:
suite = discover_test_classes()
runner = unittest.TextTestRunner()
results = runner.run(suite)
(您也可以使用 unittest-xml-reporting
包,然后您可以获得 JUnit XML 格式的测试结果,可以集成到构建过程中)
P.S。还有 nutter library from the Microsoft - it's designed specifically for notebooks testing. It has some advantages, like, automatic discovery of tests, generation of results as JUnit XML, etc. I have an example 将它与 Databricks Repos 功能一起使用。
我正在使用以下代码
我遇到了同样的问题,多亏了两篇文章(请参阅下面的源代码),我才得以解决。但是,最重要的部分是您可以在 DATABRICKS notebook 中执行的可重现示例(它对我有用,我有 python 3.7):
import unittest
class SayHiAndBye():
def say_hello(self,name):
return f"Hello {name}"
def say_bye(self,name):
return f"Bye {name}"
class MyNotebookTesting(unittest.TestCase):
"""
You can test whaatever you want in here
"""
def test_hello(self):
sayHiBye = SayHiAndBye()
actual_output = sayHiBye.say_hello("Bratt")
expected_ouput = "Hello Bratt"
self.assertEqual(actual_output, expected_ouput)
def test_bye(self):
sayHiBye = SayHiAndBye()
actual_output = sayHiBye.say_bye("Bratt")
expected_ouput = "Bye Bratt"
self.assertEqual(actual_output, expected_ouput)
suite = unittest.TestLoader().loadTestsFromTestCase(MyNotebookTesting)
runner = unittest.TextTestRunner(verbosity=100)
results = runner.run(suite)
print(results)
如您所见,它会告诉您 test_string 失败,但 test_boolean 可以。
这些值仅针对示例进行了硬编码(请随意更改它们并查看输出结果)。
来源:
https://www.linuxtut.com/en/cd2a861b29e00448fc0f/
https://www.journaldev.com/15899/python-unittest-unit-test-example
我在 DataBricks 中进行单元测试时遇到问题。我还没有发现任何类似的错误信息。有人可以帮我吗?
下面你可以找到我的代码:
import unittest
def add(n1, n2):
a = n1+n2
return a
class addTest(unittest.TestCase):
def test_add(self):
self.assertEqual(add(5,5), 10)
unittest.main()
错误信息是这样的:
EEEEEEEE
======================================================================
ERROR: 36941 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '36941'
======================================================================
ERROR: 0 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '0'
======================================================================
ERROR: 50000 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '50000'
======================================================================
ERROR: 923 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '923'
======================================================================
ERROR: dcc9864f9b334f05b20e25d63062f770 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute 'dcc9864f9b334f05b20e25d63062f770'
======================================================================
ERROR: 3 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '3'
======================================================================
ERROR: 4b8784f2c9e2dd8ccd5890b026495bf12fc0671c88baa508721606e240ca39b2 (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute '4b8784f2c9e2dd8ccd5890b026495bf12fc0671c88baa508721606e240ca39b2'
======================================================================
ERROR: unpinned (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute 'unpinned'
有人可以帮助我吗?谢谢!
unittest.main
包在使用 Databricks 时需要特殊处理。使用 Databricks 的主要要求是在 unittest.main
函数的参数列表中设置 exit = False
。将 argv
作为单元素列表显式传递也是有意义的,以避免使用 Databricks 上包含用于启动 Python 子进程的参数的 sys.argv
。 (参见 documentation on unittest.main
)。
但它也可能无法按预期工作。我通常通过自己进行自动发现并执行它来生成测试套件。例如使用以下代码:
import unittest
def discover_test_cases(*test_classes):
suite = unittest.TestSuite()
for test_class in test_classes:
for test in unittest.defaultTestLoader.getTestCaseNames(test_class):
suite.addTest(test_class(test))
return suite
def discover_test_classes():
classes = [obj for name, obj in globals().items()
if name.endswith('Test') and
obj.__module__ == '__main__' and
isinstance(obj, type) and
unittest.case.TestCase in set(obj.__bases__)]
return discover_test_cases(*classes)
它被用作:
suite = discover_test_classes()
runner = unittest.TextTestRunner()
results = runner.run(suite)
(您也可以使用 unittest-xml-reporting
包,然后您可以获得 JUnit XML 格式的测试结果,可以集成到构建过程中)
P.S。还有 nutter library from the Microsoft - it's designed specifically for notebooks testing. It has some advantages, like, automatic discovery of tests, generation of results as JUnit XML, etc. I have an example 将它与 Databricks Repos 功能一起使用。
我正在使用以下代码
我遇到了同样的问题,多亏了两篇文章(请参阅下面的源代码),我才得以解决。但是,最重要的部分是您可以在 DATABRICKS notebook 中执行的可重现示例(它对我有用,我有 python 3.7):
import unittest
class SayHiAndBye():
def say_hello(self,name):
return f"Hello {name}"
def say_bye(self,name):
return f"Bye {name}"
class MyNotebookTesting(unittest.TestCase):
"""
You can test whaatever you want in here
"""
def test_hello(self):
sayHiBye = SayHiAndBye()
actual_output = sayHiBye.say_hello("Bratt")
expected_ouput = "Hello Bratt"
self.assertEqual(actual_output, expected_ouput)
def test_bye(self):
sayHiBye = SayHiAndBye()
actual_output = sayHiBye.say_bye("Bratt")
expected_ouput = "Bye Bratt"
self.assertEqual(actual_output, expected_ouput)
suite = unittest.TestLoader().loadTestsFromTestCase(MyNotebookTesting)
runner = unittest.TextTestRunner(verbosity=100)
results = runner.run(suite)
print(results)
如您所见,它会告诉您 test_string 失败,但 test_boolean 可以。 这些值仅针对示例进行了硬编码(请随意更改它们并查看输出结果)。
来源:
https://www.linuxtut.com/en/cd2a861b29e00448fc0f/
https://www.journaldev.com/15899/python-unittest-unit-test-example