1

我继承了测试提供数据的 API 的代码。客户以 SQL 代码的形式提供预期结果。测试代码有一个实用程序类,其中包含用于将 ADO.NET 对象与 API 中的对象进行比较的 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 的实例转换为新的子类型?

4

0 回答 0