SQL Server 2000と2005の違い、特にnvarchar(max)データ型を考慮して、SQL Serverデータベースアダプターを分離しました。コードの変更が非常に小さいのでAssert.IsInstanceOfTypeを呼び出すときに祖先を除外する方法?
は、代わりに私たちのアダプタインターフェイスと抽象基本クラスを再実装するのは、私はSQL 2000からSQL 2005アダプタをサブクラス化し、ちょうど適切なメソッドとプロパティをオーバーライドします。
public abstract class SqlDatabaseAdapter : DatabaseAdapter, ISqlDatabaseAdapter
...
public class Sql2000DatabaseAdapter : SqlDatabaseAdapter
...
public class Sql2005DatabaseAdapter : Sql2000DatabaseAdapter
...
私たちのユニットテストコードは、以前にちょうどアダプターの特定の型にキャストし、その型に対して主張をしたが、今、我々は適切なSQL Serverのアダプタを構築するためのアダプタファクトリメソッドを持っていること(設定か、見つかりからSQL接続を介して)、正確なタイプがインスタンス化されていることを確認したい(SQL Server 2005をデフォルトにしているので)、唯一の問題は、古いテストが失敗したときに渡すということです。
、エンティティファクトリはSql2005DatabaseAdapterを作成するが、このタイプは、Sql2000Databasから継承するため、テストは合格しますeAdapter。また、それは祖先の鎖の上でさらに働きます。
私はなぜそれが渡っているのか理解しており、この特定のケースを修正するために一般的なAssert.AreEqualメソッドを使用できます。
Assert.AreEqual(typeof(Sql2005DatabaseAdapter), foo.Adapter.GetType());
しかしAssert.IsInstanceOfTypeを使用しての方法があります場合、私は興味が?
もちろん!ダビッドありがとう、私はコーディングを始めるには速すぎると思っていて、関係を考えるのに十分な時間を費やさなかった。 – si618