【问题标题】:How to write python unittest for column name is a string?如何为列名编写python unittest是一个字符串?
【发布时间】:2016-07-01 19:18:25
【问题描述】:

如果这是正确的,我不是,但是,到目前为止,我有这个,我正在尝试为此编写单元测试。

 def ValidateInputs(self, class_column_name,):

    class_column_name_ok = type(class_column_name) is str
    if not class_column_name_ok:
        raise(TypeError("Argument class_column_name must be a string type"))

我为这个单元测试做了这个,但我又没有足够的知识,我不确定。任何帮助将不胜感激

def testClassColumnName(self):
    self.assertTrue(type(class_column_name), "str")

【问题讨论】:

  • 您可以查看isinstance(class_column_name, str) 来查看列名的类型是否为字符串。所以,你可以把你的条件减少到if not isinstance(class_column_name, str)
  • @Slayer 所以,在单元测试中我应该只做 "self.assertTrue(isinstance(class_column_name, str))" 对于愚蠢的问题,我只是不太擅长。

标签: python pandas dataframe python-unittest


【解决方案1】:

在不知道您如何处理这些值的情况下,我不能说 100%。我假设您将它们绑定到类,然后提供我要编写的单元测试。

应用代码:

class MyClass(object):
    """This is my object, this is what it does"""

    def validate_inputs(self, merge_columns, class_column_name):
        """some handy docstring"""
        if not isinstance(class_column_name, str):
            raise TypeError('Argument class_column_name must be a string, supplied {0}'.format(type(class_column_name))
        self.class_column_name = class_column_name

unittests(使用标准库中的 unittest):

import unittest

class TestMyClass(unittest.TestCase):

    def setUp(self):
        self.myclass = MyClass() # cheap way to always have a 'clean class' for testing

    def test_validate_input_type_string(self):
        """Happy path test when input is correct, and everything works"""
        self.myclass.validate_input(merge_columns='some-columns', class_column_name='some_column_name')

        self.assertEqual(True, isinstance(self.myclass.class_column_name, str))

    def test_validate_input_raises_typerror(self):
        """We raise TypeError if input != string"""
        self.assertRaises(TypeError,
                          self.myclass.validate_input,
                          merge_columns=1234,
                          class_column_name=4321)


if __name__ == '__main__':
    unittest.main()

单元测试的一般提示:

A) 使用 self.assertEqual(A, B) -> 失败的输出会给你一些关于失败原因的线索。使用 self.assertTrue 之类的东西通常只会输出一条错误消息,例如“False is not True”;也就是说,虽然 100% 准确,但不是很有用。

B) 提供所有位置参数作为关键字参数 -> 使以后阅读测试更容易。

C) 每个测试用例一个断言(最多两个)-> 超过这个数量往往会使您的测试代码过于复杂。测试应该如此简单,以至于任何人(即使是刚从 3 个月的编码训练营招聘的实习生)都可以弄清楚。重写一个漏洞测试套件(或花费数小时更新测试代码)b/c 对应用程序代码进行 10 分钟更新真的很痛苦。

希望这有帮助。

【讨论】:

  • 感谢您的所有意见。问题,“.format(type(class_column_name))”是做什么的?我有点困惑。
  • 我只是添加了提供给错误消息的类型。 ' {}'.format() 方式是新风格,做 '%s' % 事情是旧方式。结帐this链接了解更多信息。
猜你喜欢
  • 2017-11-26
  • 1970-01-01
  • 2012-02-14
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2014-10-02
相关资源
最近更新 更多