类属性是只读的(测试重构)

时间:2012-08-23 09:16:06

标签: c# .net ado.net nunit system-testing

我继承了测试提供数据的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实例转换为新的子类型?

0 个答案:

没有答案