如何进行仅在满足该方法的所有条件时才能通过的测试

时间:2018-07-15 17:48:08

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

我有一个名为Helper的类,其中包含一个名为create_list的方法。我为create_list方法编写的测试包括以下情况:如果任何值与预期的类型都不匹配,则应该引发TypeError

该课程如下:

class Helper(object):

    def create_list(self, hel_id, hel_name, hel_type, hel_desc):
        if not isinstance(hel_id, int):
            raise TypeError
        elif not isinstance(hel_name, str):
            raise TypeError
        elif not isinstance(hel_type, str):
            raise TypeError
        elif not isinstance(hel_desc, str):
            raise TypeError

我写的测试如下:

import unittest

import Helper


class TestHelp(unittest.TestCase):
"""Unit Tests for the Helper class"""

    def setUp(self):
        self.helper = Helper()

    def test_create_list_raise_type_error(self):
        with self.assertRaises(TypeError):
            self.helper.create_list('', 'somename', 'sometype', 'somedescription')
            self.helper.create_list(1, 1, 'sometype', 'somedescription')
            self.helper.create_list(1, 'somename', 1, 'somedescription')
            self.helper.create_list(1, 'somename', 'sometype', 1)

问题是,当第一个if isinstance检查添加到Helper类时,测试通过了。注释掉其他检查不会使测试失败。如何编写测试(或代码,如果那是问题的话),以便仅在满足所有条件时才通过测试,即为每个无效输入引发TypeError

1 个答案:

答案 0 :(得分:2)

您的示例通过了,因为一个实例化引发了一个异常。声明所有这样的实例:

pa_data <- data_frame(
  GEOID = pa_counties_sf$GEOID
) %>%
  mutate(type = sample(c("A", "B"), size = nrow(.), replace = T))

pa_counties_sf %>%
  left_join(pa_data, by = "GEOID") %>%
  ggplot() +
    geom_sf(aes(fill = type), color = "blue")