我在一个相当大的产品上工作。它一直在开发中,因为 .Net 1.0 仍在进行中,所以它有很多质量差的代码,并且没有考虑到单元测试。现在我们正在努力提高质量并为每个功能和错误修复实施测试。我们现在遇到的最大问题之一是依赖地狱和上帝对象。有一个特别糟糕的上帝对象:Session
。基本上,与程序当前会话相关的任何内容都在此对象中。还有一些其他的神物。
无论如何,我们通过使用 Resharper 从中提取接口,使这个上帝对象“可模拟”。然而,这仍然使测试变得困难,因为大多数时候您必须查看您编写的代码,以从 100 种不同的方法和属性中找出真正需要模拟的内容。
现在仅仅拆分这个类是不可能的,因为实际上有成百上千个对这个类的引用。
因为我有一个接口(并且几乎所有代码都被重构为使用该接口),所以我有了一个有趣的想法。如果我让ISession
接口继承自其他接口怎么办。
例如,如果我们有这样的事情:
interface IBar
{
string Baz{get;set;}
}
interface IFoo
{
string Biz{get;set;}
}
interface ISession: IFoo, IBar
{
}
这样,使用 ISession 的现有代码不必更新,实际实现也不必更新。但是,在我们编写和重构的新代码中,我们可以使用更精细的 IFoo 或 IBar 接口,但传入一个 ISession。
最终,我认为这可能更容易最终分解实际的 ISession 和 Session 上帝接口/对象
现在给你。这是测试这些上帝对象并最终分解它们的好方法吗?这是记录在案的方法和/或设计模式吗?你做过这样的事吗?