рдЬреНрд╡рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп
рдпреВрдирд╛рдЗрдЯреЗрд╕реНрдЯ рд╢рд╛рдпрдж рдкрд╛рдпрдерди рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдкрд░реАрдХреНрд╖рдг рд▓реЗрдЦрди рдврд╛рдВрдЪрд╛ рд╣реИред рдпрд╣ рд╕реАрдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдПрдХ рдирд╣реАрдВ) рдПрдХрддрд░рдлрд╛ рдореЗрдВ рдХрдореА рд╣реИред
рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛
рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдкрд░ рдЪрд░реНрдЪрд╛ (рдФрд░ рдирд┐рдВрджрд╛) рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдордЭрддрд╛ рд╣реВрдВред рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ "рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╕реБрдирд╛, рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗрд╡рд╛ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдереА рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрдм рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпреЗ рд╡рд╣реА рдкрд░реАрдХреНрд╖рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рдЯреЗрд╕реНрдЯ рдирд╣реАрдВ рд▓рд┐рдЦреЗ ... рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред рдЬрдм рдЖрдк рд╕реБрдмрд╣ рдЙрдарддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА рдЙрди рд╕рдВрд╡реЗрджрдирд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ "рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рддрддреНрдХрд╛рд▓ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред тАЭ рдкрд╣рд▓реЗ рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЖрдорддреМрд░ рдкрд░ рддрдм рддрдХ рдмреЗрдХрд╛рд░ рд▓рдЧрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╡реЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдЕрдм рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ, рдЬреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:
- рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
- рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
- рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╕реЗ рдХреЛрд░реЛрд▓рд░реА: рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
- рдЯреЗрд╕реНрдЯ - рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд▓реЗрдЦрди рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ
рдПрдХ рдорд╛рдпрдиреЗ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ? рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рд╛рдВ - рдпрд╣ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ, рдпрджреНрдпрдкрд┐ рджреВрд╕рд░реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдгред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди
рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдореБрдЭреЗ рдПрдХ рдЕрдореВрд░реНрдд рдкрд░реАрдХреНрд╖рд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдпрд╣ рдПрдХ рдРрд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдЬреЛ рдЦреБрдж рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд░рд┐рд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рддрдм рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдорд╛рдирд╡реАрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
class SerializerChecker(TestCase): model = None serializer = None def test_fields_creation(self): props = TestObjectFactory.get_properties_for_model(self.model) obj = TestObjectFactory.create_test_object_for_model(self.model) serialized = self.serializer(obj) self.check_dict(serialized.data, props)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ TestObjectFactory рдФрд░ check_dict рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкреНрд░реЙрдкреНрд╕ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХрд╛ рд╢рдмреНрджрдХреЛрд╢ рд╣реИ, obj рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред check_dict рдПрдХ рдореИрдЪ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреВрдирд┐рдЯреЗрд╕реНрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрдИ рд▓реЛрдЧ рддреБрд░рдВрдд рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдореЗрд░реЗ рд╕рд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рд╕реЗ test_fields_creation рдкрджреНрдзрддрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧреА, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рд╕рдмрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рдХрд▓реНрдк рдЯреЗрд╕реНрдЯрдХреИрд╕реЗрдЬрд╝ рд╕реЗ SerializerChecker рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рджреЗрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд░рд┐рд╕ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ:
class VehicleSerializerTest(SerializerChecker, RecursiveTestCase): model = Vehicle serializer = VehicleSerialize
RecursiveTestCase TestCase рдХрд╛ рдПрдХ рд╡рдВрд╢рдЬ рд╣реИ рдЬреЛ check_dict рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдПрдХ рд╕рд╛рде рдХрдИ рдкрджреЛрдВ рд╕реЗ рдмрджрд╕реВрд░рдд рд╣реИ:
- SerializerChecker рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдмрдЪреНрдЪреЗ рдХреЛ TestCase рд╕реЗ рд╡рд╛рд░рд┐рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдЗрд╕ рдХреЛрдб рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреА рд╣реИред
- рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╣рдардкреВрд░реНрд╡рдХ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ SerializerChecker рдХреЗ рдкрд╛рд╕ check_dict рдкрджреНрдзрддрд┐ рдирд╣реАрдВ рд╣реИ
рддреНрд░реБрдЯрд┐ рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдлреЗрдВрдХрддрд╛ рд╣реИрдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк check_dict рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯрдм рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
class SerializerChecker: model = None serializer = None def check_dict(self, data, props): raise NotImplementedError def test_fields_creation(self): props = TestObjectFactory.get_properties_for_model(self.model) obj = TestObjectFactory.create_test_object_for_model(self.model) serialized = self.serializer(obj) self.check_dict(serialized.data, props)
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ:
- рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╡рдВрд╢рдЬ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди RecursiveTestCase, рдЬреЛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкреНрд░рд╢реНрди рдмрдирд╛рддрд╛ рд╣реИред
- TestCase рдореЗрдВ рдХрдИ рджрд╛рд╡реЗ * рддрд░реАрдХреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯрдм рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЕрднреА рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ?
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреЗрдирд╛
рдпреВрдиреАрдЯреЗрд╕реНрдЯ рдЯреЗрд╕реНрдЯрдХреЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рд╢реНрд░реЗрдгреА рдХреЛ "рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ" рдХрд░рдиреЗ рдХреА рд╕рдВрдд рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреАред рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ?