J'ai une méthode qui retourne un ensemble d'objets, et j'écris un test unitaire pour cette méthode. Existe-t-il une façon générique, ordonnée et idiomatique de les comparer pour l'identité (plutôt que l'égalité)? Ou dois-je écrire moi-même une implémentation appropriée?Comparaison de deux conteneurs pour l'identité de leur contenu
Un exemple (spécieux de rester simple):
class Foo(object):
def has_some_property(self):
...
class Container(object):
def __init__(self):
self.foo_set = set()
def add_foo(self, foo):
self.foo_set.add(foo)
def foo_objects_that_have_property(self):
return set([foo for foo in self.foo_set if foo.has_some_property()])
import unittest
class TestCase(unittest.TestCase):
def testFoo(self):
c = Container()
x, y, z = Foo(), Foo(), Foo()
...
self.assertContentIdentity(c.foo_objects_that_have_property(), set([x, y]))
Fait important, les tests ici pour l'égalité ne fera pas, puisque les objets retournés muter par foo_objects_that_have_property()
peut conduire à des résultats incohérents en fonction de la façon dont ces objets sont utilisés différemment dans Container
même s'ils sont "égaux" au moment du test.
Il est assez clair que vous demandez ici. Quels objets essayez-vous de comparer? Pourquoi devraient-ils être les mêmes? Utiliser 'x is y' teste l'identité. – Falmarri
Je veux savoir si deux conteneurs (ensembles dans ce cas) sont identiques et pas seulement égaux. 'x is y' ne fonctionnera pas ici car cela me dirait que les sets sont différents, ce que je sais déjà. Je veux savoir si les objets qu'ils contiennent sont les mêmes objets ou objets différents. –
Pourquoi est-ce important que les objets soient identiques, à condition qu'ils soient égaux? Considérons que l'ensemble, lui-même, considère l'égalité plutôt que l'identité pour déterminer si quelque chose est dupliqué dans le conteneur. Considérez également que le test d'égalité est par défaut un test d'identité, pour les types définis par l'utilisateur. –