首页 > 解决方案 > 带有 XMLTestRunner 的单元测试未按预期工作

问题描述

我在下面的尝试中有几个问题。调用 to 似乎一切都很好isEven,但是

  1. TestRunner 对 ping 的调用似乎只使用了该数组中的第一个元素
  2. 生成的 xmlisEven(..)具有name="test_even_0"classname="TestCase"正如预期的那样,但是 ping(..) 的 xml 具有name="111"classname="TestCase.test_ping_10.250.70"

classnamename属性看起来都怪怪的!

请帮忙

import sys, os, json, unittest, xmlrunner

data = ["10.250.70.88","10.250.70.111"]

class TestCase(unittest.TestCase):
    longMessage = True

    def isEven(self, i):
        self.assertEquals(0, i % 2)

    def ping(self, host):
        print '** ', host, ' **'
        if host.endswith('1'):
            self.assertFalse

for i in xrange(0, 2):
    def test_isEven(num):
        return lambda self: self.isEven(num)
    setattr(TestCase, "test_even_%r" % i, test_isEven(i))

for i in data:
    print '* ', i, ' *'
    def test_ping(host):
        return lambda self: self.ping(i)
    setattr(TestCase, "test_ping_%s" % i, test_ping(i))

runner = xmlrunner.XMLTestRunner(output=sys.stdout)
unittest.main(testRunner=runner)

下面输出 XML

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
        <testsuite errors="0" failures="1" file=".py" name="TestCase-20210603151437" skipped="0" tests="4" time="0.004" timestamp="2021-06-03T15:14:37">
                <testcase classname="TestCase" file="test\python\test_Dynamic.py" line="18" name="test_even_0" time="0.001" timestamp="2021-06-03T15:14:37">
                        <system-out>
<![CDATA[]]>                    </system-out>
                        <system-err>
<![CDATA[]]>                    </system-err>
                </testcase>
                <testcase classname="TestCase.test_ping_10.250.70" file="test\python\test_Dynamic.py" line="24" name="111" time="0.001" timestamp="2021-06-03T15:14:37">
                        <system-out>
<![CDATA[**  10.250.70.111  **
]]>                     </system-out>
                        <system-err>
<![CDATA[]]>                    </system-err>
                </testcase>
                <testcase classname="TestCase.test_ping_10.250.70" file="test\python\test_Dynamic.py" line="24" name="88" time="0.001" timestamp="2021-06-03T15:14:37">
                        <system-out>
<![CDATA[**  10.250.70.111  **
]]>                     </system-out>
                        <system-err>
<![CDATA[]]>                    </system-err>
                </testcase>
                <testcase classname="TestCase" file="test\python\test_Dynamic.py" line="18" name="test_even_1" time="0.001" timestamp="2021-06-03T15:14:37">
                        <failure message="0 != 1" type="AssertionError">
<![CDATA[Traceback (most recent call last):
  File "test\python\test_Dynamic.py", line 18, in <lambda>
    return lambda self: self.isEven(num)
  File "test\python\test_Dynamic.py", line 9, in isEven
    self.assertEquals(0, i % 2)
AssertionError: 0 != 1
]]>                     </failure>
                        <system-out>
<![CDATA[]]>                    </system-out>
                        <system-err>
<![CDATA[]]>                    </system-err>
                </testcase>
        </testsuite>
</testsuites>

标签: pythonpython-2.7python-unittest

解决方案


推荐阅读