私は、次のPythonの関数のためのユニットテストを書きたいと言う:単体テストのデータを簡略化するか現実的にする必要がありますか?
def multiply(dict_1, dict_2):
result = {}
for (key_1, key_2) in dict_1:
result[(key_1, key_2)] = dict_1[(key_1, key_2)] * dict_2[key_2]
return result
dict_1
とdict_2
は、他の機能からの出力です。彼らは長くないですが、彼らはちょっと複雑に見える:これらの特定のパラメータについては、この機能の
dict_1 = {
('Nietzsche', 'USR1'): Decimal('0E-8'),
('Nietzsche', 'PKILL'): Decimal('1.49177787'),
('Nietzsche', 'RM'): Decimal('10971.22182930'),
('Nietzsche', 'LS'): Decimal('4.44771349'),
('Nietzsche', 'NCDU'): Decimal('5.14671343'),
('Nietzsche', 'SUDO'): Decimal('9.49572673'),
('Nietzsche', 'PS'): Decimal('0.57328494'),
('Hegel', 'USR1'): Decimal('0E-8'),
('Marx', 'NCDU'): Decimal('0E-8'),
('Marx', 'SUDO'): Decimal('0E-8'),
('Marx', 'PS'): Decimal('0E-8'),
('Marx', 'LS'): Decimal('0E-8'),
('Marx', 'PKILL'): Decimal('0E-8')
}
dict_2 = {
'USR1': Decimal('6357.48'),
'PKILL': Decimal('307.277'),
'RM': Decimal('88.232'),
'LS': Decimal('71.1787'),
'NCDU': Decimal('0.0389333'),
'SUDO': Decimal('199.979'),
'PS': Decimal('307.277')
}
出力もちょっと複雑になります。
{
('Nietzsche', 'USR1'): Decimal('0E-10'),
('Nietzsche', 'PKILL'): Decimal('458.38902855999'),
('Nietzsche', 'RM'): Decimal('968012.84444279760'),
('Nietzsche', 'LS'): Decimal('316.582464190663'),
('Nietzsche', 'NCDU'): Decimal('0.200378537984219'),
('Nietzsche', 'SUDO'): Decimal('1898.94593573867'),
('Nietzsche', 'PS'): Decimal('176.15727650838'),
('Hegel', 'USR1'): Decimal('0E-10'),
('Marx', 'NCDU'): Decimal('0E-15'),
('Marx', 'SUDO'): Decimal('0E-11'),
('Marx', 'PS'): Decimal('0E-11'),
('Marx', 'LS'): Decimal('0E-12'),
('Marx', 'PKILL'): Decimal('0E-11')
}
だから私は、次の2つのオプションに直面しています単体テスト。ナンバーワンは、コピー貼り付けすべてで現実的なデータを持つことです。
def test_multiply_1(self):
dict_1 = {
('Nietzsche', 'USR1'): Decimal('0E-8'),
('Nietzsche', 'PKILL'): Decimal('1.49177787'),
('Nietzsche', 'RM'): Decimal('10971.22182930'),
('Nietzsche', 'LS'): Decimal('4.44771349'),
('Nietzsche', 'NCDU'): Decimal('5.14671343'),
('Nietzsche', 'SUDO'): Decimal('9.49572673'),
('Nietzsche', 'PS'): Decimal('0.57328494'),
('Hegel', 'USR1'): Decimal('0E-8'),
('Marx', 'NCDU'): Decimal('0E-8'),
('Marx', 'SUDO'): Decimal('0E-8'),
('Marx', 'PS'): Decimal('0E-8'),
('Marx', 'LS'): Decimal('0E-8'),
('Marx', 'PKILL'): Decimal('0E-8')
}
dict_2 = {
'USR1': Decimal('6357.48'),
'PKILL': Decimal('307.277'),
'RM': Decimal('88.232'),
'LS': Decimal('71.1787'),
'NCDU': Decimal('0.0389333'),
'SUDO': Decimal('199.979'),
'PS': Decimal('307.277')
}
expected = {
('Nietzsche', 'USR1'): Decimal('0E-10'),
('Nietzsche', 'PKILL'): Decimal('458.38902855999'),
('Nietzsche', 'RM'): Decimal('968012.84444279760'),
('Nietzsche', 'LS'): Decimal('316.582464190663'),
('Nietzsche', 'NCDU'): Decimal('0.200378537984219'),
('Nietzsche', 'SUDO'): Decimal('1898.94593573867'),
('Nietzsche', 'PS'): Decimal('176.15727650838'),
('Hegel', 'USR1'): Decimal('0E-10'),
('Marx', 'NCDU'): Decimal('0E-15'),
('Marx', 'SUDO'): Decimal('0E-11'),
('Marx', 'PS'): Decimal('0E-11'),
('Marx', 'LS'): Decimal('0E-12'),
('Marx', 'PKILL'): Decimal('0E-11')
}
actual = multiply(dict_1, dict_2)
self.assertEqual(actual, expected)
ナンバー2には、ダミーデータを使用して簡単にすることである。
def test_multiply_1(self):
dict_1 = { ('Nietzsche', 'PKILL'): Decimal('1.49177787') }
dict_2 = { 'PKILL': Decimal('307.277') }
actual = multiply(dict_1, dict_2)
expected = { ('Nietzsche', 'PKILL'): Decimal('458.38902855999') }
self.assertEqual(actual, expected)
ナンバー2は、道より読みやすいですが、ナンバーワンは、より現実的です。どちらが優先され、なぜですか?
"単体テストの目的は...コード作業[...]が簡単な入力であるかどうかをチェックすることです"という言葉はおそらく* trivial *という言葉を過大評価しています。単体テストでは、実際に渡される可能性のある入力に対して、テスト対象のコードが確実に動作するようにする必要があります。最も理想的な場合には、無意味なコードに対して責任あるエラーを投げることが含まれます。 –