【问题标题】:Unit test is only running one test (python)单元测试只运行一个测试(python)
【发布时间】:2021-07-01 12:42:06
【问题描述】:

我正在尝试实现一些单元测试,并且我有各种不同的输入文件要调用到我的程序中进行测试。我要测试的功能位于my_file, 对于名为 test_func 的函数。

这是我的代码:

import unittest
import make_html
    
  
class TestBuild(unittest.TestCase):
        def test_test_func(self):
            # Case 1: blank input file -> Return 'Blank'
            expected_output = 'Blank'
            self.assertEqual(make_html.test_func('blank'),expected_output)

            # Case 2: Non-numeric -> Should raise ValueError
            with self.assertRaises(ValueError):
                make_html.test_func('non_numeric')
                                  

if __name__ == '__main__': # run the main file within unit test package
    unittest.main()

当我尝试运行这个单元测试时,它只运行了 1 个测试。如果我单独运行它们,它们会返回“OK”。我究竟做错了什么?我如何获得它以便运行两个测试。此外,我想添加更多案例。关于classself__name____main__ 周围的语法,我不太确定这里会发生什么。

更新:我尝试将它分成两个测试,但得到相同的结果:

import unittest
import make_html
    
  
class TestBuild(unittest.TestCase):
        def test_test_func(self):
            # Case 1: blank input file -> Return 'Blank'
            expected_output = 'Blank'
            self.assertEqual(make_html.test_func('blank'),expected_output)

        def test_test_func(self):
            # Case 2: Non-numeric -> Should raise ValueError
            with self.assertRaises(ValueError):
                make_html.test_func('non_numeric')
                                  

if __name__ == '__main__': # run the main file within unit test package
    unittest.main()

我的输出仍然只是:

----------------------------------------------------------------------
Ran 1 test in 0.001s

【问题讨论】:

  • 虽然您编写的内容是合法的,但如果您将测试分成两个单独的测试,您将获得更好的报告。你怎么知道只运行了一次测试,test_func 究竟做了什么?
  • 你能把你第二个测试的代码也包括进来吗?
  • 当您说“测试”时,您是指asserts 吗?因为从技术上讲,您只有 1 个测试:test_test_func。还请edit 显示您在运行此程序时在控制台/终端上获得的实际输出。如果第一个 assert 失败,则跳过该测试中的其余 assertions。
  • @GinoMempin 哦,我现在明白了。我认为每个断言都是多个测试。我如何将其分成两个单独的测试?
  • 在您更新版本的测试中,您使用了相同的方法名称。第二个覆盖第一个。

标签: python python-3.x unit-testing


【解决方案1】:

你只需要另一种测试方法:

class TestBuild(unittest.TestCase):
    def test_blank(self):
        # Case 1: blank input file -> Return 'Blank'
        expected_output = 'Blank'
        self.assertEqual(make_html.test_func('blank'),expected_output)
    def test_ValueError(self):
        # Case 2: Non-numeric -> Should raise ValueError
        with self.assertRaises(ValueError):
            make_html.test_func('non_numeric')

【讨论】:

  • 好的,我明白我做错了什么。我使用了相同的函数名...谢谢!
猜你喜欢
  • 2013-10-30
  • 2016-12-13
  • 2012-02-14
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
相关资源
最近更新 更多