Nous venons de séparer nos adaptateurs de base de données SQL Server pour tenir compte des différences entre SQL Server 2000 et 2005, en particulier le type de données nvarchar (max). Comme le changement de code est si petit, au lieu de réimplémenter nos interfaces d'adaptateur et notre classe de base abstraite, j'ai sous-classé l'adaptateur SQL 2005 à partir de SQL 2000 et je viens de surcharger les méthodes et les propriétés appropriées.Comment exclure des ancêtres lors de l'appel de Assert.IsInstanceOfType?
public abstract class SqlDatabaseAdapter : DatabaseAdapter, ISqlDatabaseAdapter
...
public class Sql2000DatabaseAdapter : SqlDatabaseAdapter
...
public class Sql2005DatabaseAdapter : Sql2000DatabaseAdapter
...
Notre code de test unitaire précédemment juste jeté à un type particulier de l'adaptateur, puis a fait une affirmation contre ce type, mais maintenant que nous avons une méthode de fabrication de l'adaptateur pour construire l'adaptateur approprié SQL Server (de configuration ou trouvé via la connexion SQL), je veux vérifier que le type exact est instancié (puisque nous avons maintenant par défaut SQL Server 2005), le seul problème est que nos anciens tests passent quand ils devraient échouer :)
Dans l'exemple ci-dessous , la fabrique d'entités crée un Sql2005DatabaseAdapter, mais le test réussit car ce type hérite de Sql2000Databas eAdapter. Et cela fonctionne aussi plus haut dans la chaîne des ancêtres.
Entity foo = EntityFactory.Create("foo");
Assert.IsInstanceOfType(typeof(SqlDatabaseAdapter), foo.Adapter); // Should fail for test
Assert.IsInstanceOfType(typeof(Sql2000DatabaseAdapter), foo.Adapter); // Should fail for test
Assert.IsInstanceOfType(typeof(Sql2005DatabaseAdapter), foo.Adapter); // Should pass
Je comprends pourquoi il passe, et je peux utiliser la méthode Assert.AreEqual générale pour résoudre ce cas particulier.
Assert.AreEqual(typeof(Sql2005DatabaseAdapter), foo.Adapter.GetType());
Mais je suis curieux de savoir s'il existe un moyen d'utiliser Assert.IsInstanceOfType?
Bien sûr!Merci David, je suppose que j'étais trop rapide pour commencer à coder et que je n'ai pas passé assez de temps à penser aux relations. – si618