Je ne vois pas très bien comment vous comptez mettre en place des attentes fictives sur un objet qui n'est pas fictif pour commencer. De plus, vous configurez l'attente pour renvoyer un IList, ce qui n'est pas vraiment ce qui se passe lorsque le compilateur génère un itérateur.
Si vous souhaitez tester spécifiquement l'itérateur, vous devriez probablement
Assert.IsNotNull(zoo.Animals);
Et ensuite, vérifiez que l'énumérateur énumère réellement toutes les choses que vous avez ajoutées au Zoo. C'est ce que je cherchais là-bas. :)
Je ne sais pas s'il est même possible de tester si yield return est appelé, car yield return n'est qu'un sucre syntaxique pour un IEnumerable généré par le compilateur. Par exemple, appeler
zoo.Animals.GetEnumerator();
n'exécutera aucun des codes que vous avez écrits dans l'énumérateur. La première fois que cela se produit, c'est lors du premier appel à IEnumerator.MoveNext();
Maintenant, si vous essayez de tester l'interaction entre le Zoo concret et l'IEnumerable contenu par ce Zoo, vous devez faire de l'IEnumerable un champ sur Zoo et injecter un IEnumerable fictif dans ce champ au lieu d'implémenter directement un IEnumerable concret dans Zoo.
J'espère que cela vous sera utile.