![]() |
Would you unit test __init__ method? - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Would you unit test __init__ method? (/thread-5727.html) |
Would you unit test __init__ method? - kilthar - Oct-18-2017 Hi, I am learning unit testing. The principle I am trying to adopt is to unit test only incoming queries for returned value and incoming commands for change of value plus outgoing command checking if it was sent with correct parameters (as per Sandi Metz lecture). This cuts off unnecessary testing of private methods and redundant tests of the same code. I am at a loss though how to classify an __init__ method that sets up publicly available attributes of a class... Example: MyClass(object): def __init__(self, public_attr_1, public_attr_2) self.public_attr_1 = public_attr_1 self.public_attr_2 = public_attr_2 Test: instance = MyClass(1, 2) assert instance.public_attr_1 = 1 assert instance.public_attr_2 = 2 My hunch is that it should be unit tested to make sure the class is initialized with correct attributes (the public ones). Would you unit test it? (Sorry for no formatting for code - it disappeared) RE: Would you unit test __init__ method? - snippsat - Oct-18-2017 Python doesn't have public or private attributes,so to talk about that is wrong All attributes are accessible to all code. All can be tested if it make sense to do so. Example: foo.py class MyClass: def __init__(self, public_attr_1, public_attr_2): self.public_attr_1 = public_attr_1 self.public_attr_2 = public_attr_2 test_foo.py import pytest from foo import MyClass def test_initial_value(): obj_1 = MyClass(1, 2) assert obj_1.public_attr_1 == 4 assert obj_1.public_attr_2 == 2 def test_no_value(): with pytest.raises(Exception) as e_info: obj = MyClass(1, 2)Test: Fix:import pytest from foo import MyClass def test_initial_value(): obj_1 = MyClass(1, 2) assert obj_1.public_attr_1 == 1 assert obj_1.public_attr_2 == 2 def test_no_value(): with pytest.raises(Exception) as e_info: obj = MyClass()Test:
|