English 中文(简体)
如何在每一测试案例有不同投入但相同的情况下进行单位测试?
原标题:How to write a unit-test where each test case has different input but does the same?

我需要为一些猪阶级进行单位测试。 我有一个投入和预期结果数据库,这些投入应由UUT生成。

这里是我想做的假象:

for i=1 to NUM_TEST_CASES:
    Load input for test case i
    execute UUT on the input and save output of run
    Load expected result for test case i
    Compare output of run with the expected result

Can 我通过单元测试包来实现这一目标,或者是否为此提供了一些更好的测试包?

最佳回答

你们描述测试的方式是一般单位测试的奇迹。 单位测试并非——通常——负荷测试数据或外部档案的其他结果。 一般来说,在单位测试中,它只是硬编码。

这并不是说,你的计划赢得了一定的工作。 它只是说它ical。

你有两个选择。

  1. (我们做了些什么)。 撰写“试验案例一”和“测试案例一的预期结果”的几处文字。 利用这一方法产生所需的单位测试代码。 (我们使用Jinja2 模板,从源文档中书写成甲醇。)

    然后删除来文方档案。 是的,删除。 他们只打了你。

    你们留下的就是用固定数据对测试案例和预期结果的“普通”表格中的档案进行适当分类。

  2. 撰稿人:<代码>Up 采用“试验案例一”和“试验案例一的预期结果”的方法。 撰稿人:test,以使用UUT。

它可能这样做。

class OurTest( unittest.TestCase ):
    def setUp( self ):
        self.load_data()
        self.load_results()
        self.uut = ... UUT ...
    def runTest( self ):
        ... exercise UUT with source data ...
        ... check results, using self.assertXXX methods ...

不得不如此多的时间? 这样做的一种方式就是这样做。

class Test1( OurTest ):
    source_file =  this 
    result_file =  that 

class Test2( OutTest ):
    source_file=  foo 
    result_file=  bar 

这将使该单位能够测试主要方案,以发现和进行测试。

问题回答

我们这样做是为了在<代码>unittest框架内进行实际的<>integration<>em>(回归)测试(实际上是一种内部定制,给我们带来巨大好处,例如,在一组机器上同时进行测试等——这一定制的巨大附加价值正是为什么我们更愿意使用<代码>unittest框架。

每一试验在档案中都有代表(该试验中使用的参数,随后是预期结果)。 我们的融合——测试从目录中读到所有此类档案,然后打电话:

def addtestmethod(testcase, uut, testname, parameters, expresults):
  def testmethod(self):
    results = uut(parameters)
    self.assertEqual(expresults, results)
  testmethod.__name__ = testname
  setattr(testcase, testname, testmethod)

我们从一个空洞的试样开始:

class IntegrationTest(unittest.TestCase): pass

之后称为addtestmethod(融合) 测试,......,其中,我们重新阅读了所有相关档案,并将其分类,以便获得测试名称、参数和成果。

最后,我们称之为我们的内部专业测试操作员,该试验是重提的(对一组现有机器进行测试,收集结果等)。 我们不想重新发明这一富附加值的轮轮轮,因此,我们重新做一个试验案例,接近于一个典型的“手编码”案例,而这种试验是“装饰”对我们来说是可行的。

除非有具体理由(良好测试操作员或类似原因)使用<代码>unittest进行(一体化?)测试,否则你可能会发现你的生活更加简单,采取不同的做法。 然而,这非常可行,我们对其结果感到非常高兴(其中大多包括大量融合/回归测试的bla缩-法斯特)。

您可为此使用http://docs.python.org/library/doctest.html>rel=“nofollow noreferer”>。 了解你的投入和产出(并能够把案件编号描绘成一个功能名称),你应当能够提出类似文件:

>>> from XXX import function_name1
>>> function_name1(input1)
output1
>>> from XXX import function_name2
>>> function_name2(input2)
output2
...

然后,仅使用<代码>doctestfile(案例.txt )。 这值得尝试。

您也不妨查看my to ? 我再一次试图进行回归测试,而不是进行单位检测,但单元测试框架对双方都有利。

在我的案件中,我有大约十几个投入文件,涉及不同使用案件的公平分布,我有大约一半的测试职能,我想分别要求。

除了输入参数和结果数据之外,我没有撰写72种不同的测试,其中多数是相同的,我创建了成果的字典(关键是投入参数,其价值是测试中每项功能的成果的字典)。 然后,我写了单一测试案例类别,以测试6项功能中的每一项,并在12项测试档案中复制,在试验中添加“Teh TestCase”多个时间。





相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签