Допустим, у меня есть простой объект класса, который выглядит как-то вроде Counter
(конечно, у него есть другие функции, но это выходит за рамки этого вопроса):
from collections import Counter
class Vocabulary:
def __init__(self, words):
self.vocab = Counter(words)
И добавление *Класс 1005 * для юнит-теста, я мог бы использовать метод класса setUpClass
как таковой:
import unittest
class VocabularyTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.vocab = Vocabulary(["z", "a", "b", "c", "f", "d", "e", "g", "a", "d", "b", "e", "w"])
def test_counts_set_correctly(self):
self.assertEqual(cls.vocab["a"], 2)
Или я мог бы просто использовать self
:
class VocabularyTests(unittest.TestCase):
def __init__(self, *args, **kwargs):
super(VocabularyTests, self).__init__(*args, **kwargs)
self.vocab = Vocabulary(["z", "a", "b", "c", "f", "d", "e", "g", "a", "d", "b", "e", "w"])
def test_counts_set_correctly(self):
self.assertEqual(self.vocab["a"], 2)
И обавыше будет работать нормально.Но что, если у меня есть некая пифоническая модель:
import unittest
class VocabularyTests(unittest.TestCase):
@classmethod
def setUpClass(self):
self.vocab = Vocabulary(["z", "a", "b", "c", "f", "d", "e", "g", "a", "d", "b", "e", "w"])
def test_counts_set_correctly(self):
self.assertEqual(self.vocab["a"], 2)
Согласно Для чего используется переменная 'cls' в классах Python? , это просто соглашение по кодированию, но оноЕсть ли разница между 3-й версией unittest с @classmethod
с использованием self.vocab
и первыми двумя более идиоматическими тестами?