我继承了测试提供数据的API的代码。客户提供预期结果作为SQL代码。测试代码有一个实用程序类,其中包含VerifyResult的各种重载,它将ADO.NET Object与API中的对象进行比较。它似乎不是非常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实例转换为新的子类型?