当现有代码非常不灵活时引入单元测试代码

Bringing in Unit testing code when existing code is quite Inflexible

我的开发环境信息如下:

MongoDB 3.0.0

MongoDB C# 驱动程序版本 1.7.0.4714

微软 Visual Studio 专业版 2013

.NET Framework 4.0

我们即将发布第一个产品版本。我们使用领域驱动设计方法开发了应用程序。 不幸的是,我们没有写任何单元测试用例。

我们还没有真正遵守适当的编码实践,以便在未来具有灵活性。例如,在下面的代码中,我们没有使用数据库连接的接口,而是直接实例化了数据库连接 class:

public class BLLCs_BookStore_Catalog : ICs_BookStore_Catalog
{

    public IEnumerable<ELLCsBook> GetAParticularBook(ObjectId BookIdArg)
    {
        IMongoQuery qry = Query<ELLCsBook>.EQ(l => l.Id, BookIdArg);
        return DBConnection.database.GetCollection<ELLCsBook>(TableNameConstants.BooksTableName)
                                    .Find(qry);
    }
}

遗憾的是,有大量代码看起来像上述代码。

问题在于,仅重构现有代码以使用接口将花费大量的精力、时间和金钱。因此,集成单元测试将是一个真正的痛苦。

对于我们如何仍然可以进行单元测试,有没有人有任何建议?

我强烈建议您使用 Typemock Isolator。它允许不只处理接口,因此无需花费金钱和时间进行重构。

此外,它可以根据您的代码提出单元测试建议,因此也可以节省一些时间。

关于如何使用 Typemock here.

模拟对 mongo 数据库的调用,有一个很好的 answer/example

希望对您有所帮助!