データを提供する API をテストするコードを継承しました。お客様は、期待される結果を SQL コードとして提供します。テスト コードには、API からのオブジェクトと ADO.NET オブジェクトを比較する VerifyResult のさまざまなオーバーロードを含むユーティリティ クラスがあります。あまり OOP とは思えないので、リファクタリングを検討しています。
ここにいくつかの擬似コードがあります:
[Test]
public void Book()
{
DataRow expectedBook =
myTestUtility.GetBookUsingSqlForIsbn("978-0304359387");
Book actualBook = API.GetBookForIsbn("978-0304359387");
Assert.IsTrue(myTestUtility.VerifyResult(expectedBook, actualBook);
}
テストユーティリティクラス:
protected bool VerifyResult(DataRow expectedBook, Book actualBook)
{
Assert.AreEqual(expectedBook["ISBN"],
actualBook.ISBN,
"Book ISBN does not match");
Assert.AreEqual(expectedBook["AuthorName"],
actualBook.AuthorName,
"Book AuthorName does not match");
…
}
リファクタリングで最初に行ったのは、API オブジェクトの値を使用して API オブジェクト (Book など) を作成し、カスタムの等値アサーションを作成することでした。API はデータを提供するだけなので、そのクラスのプロパティは読み取り専用 (内部セット) であるため、カスタム値を使用して Book オブジェクトを作成することはできません (API は継承を使用するすべての具体的なクラスであり、インターフェイスはありません)。 )。この制限を回避する方法はありますか?
まったく異なるアプローチを提案できる場合は、お気軽にお問い合わせください。
API クラスが次のようになっているとします。
public class Point
{
public int x { get; internal set; }
public int y { get; internal set; }
}
public class Circle
{
public int Radius { get; internal set; }
public Point Pos { get; internal set; }
}
API のインスタンスを新しいサブタイプとしてキャストできるようにしながら、これらの API タイプを継承してプロパティを書き込み可能にすることは可能ですか?