我理解为类调用setUpClass/tearDownClass
方法一次,并且在每个单元测试之前/之后调用setUp()/tearDown()
。有关此标准设置,请参阅下面的代码段:
class Example(unittest.TestCase):
@classmethod
def setUpClass(cls):
do_expensive_setup_of_immutable_objects_used_by_all_tests()
def setUp(self):
do_setup_before_each_test()
def test1(self):
do_test1_stuff()
def test2(self):
do_test1_stuff()
def tearDown(self):
do_teardown_after_each_test()
@classmethod
def tearDownClass(cls):
do_teardown_of_immutable_objects_used_from_all_tests()
但是,我希望某些单元测试与其他单元测试具有不同的setUp()
和tearDown()
。什么被认为是一个很好的测试结构来实现这个功能?我有什么选择?我对Python缺乏经验,并希望知道采用一种好的风格来编写涉及昂贵的setUp()
程序的单元测试。
答案 0 :(得分:2)
也许这就是@Klaus的意思?
import unittest
class TestA(unittest.TestCase):
def setUp(self):
print "Setup # 1"
def test1(self):
print "Doing test1"
class TestB(unittest.TestCase):
def setUp(self):
print "Setup # 2"
def test2(self):
print "Doing test2"
if __name__ == "__main__":
unittest.main()
或者,您可以根据方法名称更改设置 虽然这可能有点难以维持。
class TestA(unittest.TestCase):
def setUp(self):
if self._testMethodName == "test1":
print "Setup # 1"
elif self._testMethodName == "test2":
print "Setup # 2"
def test1(self):
print "Doing test1"
def test2(self):
print "Doing test2"
if __name__ == "__main__":
unittest.main()
两者产生相同的输出:
Output:
Setup # 1
Doing test1
.Setup # 2
Doing test2
.
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
编辑:
对不起,我不认为我完全理解,但这是我尝试实施您的评论。
我的方法是重新应用BaseTest.setUp()
,而不是像你所描述的那样尽量保持原样
TypeOneTests
和TypeTwoTests
继承BaseTest
,他们使用BaseTest
setUp
内调用super(...)
个class BaseTest(unittest.TestCase):
def setUp(self):
print "BaseTest setUp"
def tearDown(self):
print "BaseTest tearDown"
# you could add tests here but I didn't add any based on your comment
class TypeOneTests(BaseTest):
def setUp(self):
super(TypeOneTests, self).setUp()
print "TypeOneTests setUp"
def tearDown(self):
print "TypeOneTests tearDown"
def test(self):
print "a test in TypeOneTests"
class TypeTwoTests(BaseTest):
def setUp(self):
super(TypeTwoTests, self).setUp()
print "TypeTwoTests additional setUp"
def tearDown(self):
print "TypeTwoTests tearDown"
super(TypeTwoTests, self).tearDown()
def test(self):
print "a test in TypeTwoTests"
if __name__ == "__main__":
unittest.main()
函数
BaseTest setUp
TypeOneTests setUp
a test in TypeOneTests
TypeOneTests tearDown
.BaseTest setUp
TypeTwoTests additional setUp
a test in TypeTwoTests
TypeTwoTests tearDown
BaseTest tearDown
.
----------------------------------------------------------------------
Ran 2 tests in 0.002s
OK
输出:
declare @Directory [varchar](max), @FileXMLName [varchar](max), @URLFileXML
[varchar](max), @url [varchar](max)
SET @Directory = 'C:\Users\bamba\Desktop\'
SET @FileXMLName = 'testing.xml'
SET @URLFileXML = @Directory + @FileXMLName
SET @url = '''' + @URLFileXML + ''''
INSERT INTO XMLwithOpenXML(XMLData, XMLLoadedFromFolder, rowstatus ,
ModifiedDate, ModifiedBy)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, @Directory,'TRUE', GETDATE(),
(SELECT TOP 1 sdes.original_login_name FROM sys.dm_exec_sessions AS sdes
ORDER BY sdes.session_id DESC)
--FROM OPENROWSET(BULK 'C:\Users\bamba\Desktop\testing.xml', SINGLE_BLOB) AS
x; --> this line work, but i need some variable to replace the path.
FROM OPENROWSET(BULK '''' + @URL + '''', SINGLE_BLOB) AS x; -->this can't
work