我对模拟测试很陌生,所以我的理解可能有误,但我认为大多数模拟框架都依赖于接口。不幸的是,我们大部分代码并没有使用接口。前几天我看到了一个Java的模拟框架,它可以重现一个类\对象的字节码,以避免调用其内部方法,但您仍然可以测试它是否调用了这些方法。
我的问题是:.Net是否有任何可以做类似事情的模拟框架? 我正在寻找一些免费的东西,并且不想要那些要求方法必须是虚方法或抽象方法的框架。
DateTime.Now
的示例。使用Moles,你可以模拟任何你想要的东西。TypeMock Isolator可以模拟任何.NET类,但它不是免费的(甚至不便宜)。我不确定它的工作原理,但它可以实现相同的最终结果。
但大多数模拟框架并不仅依赖于接口;它们应该能够像处理接口一样处理具体类,尽管它们只能覆盖虚拟或抽象方法。
我的建议是为那些需要被模拟的类创建抽象基类,并使具体类扩展它。然后可以传递抽象基类并进行模拟。这确实是一个不过于复杂的重构练习。类和接口都可以被代理,但只有虚成员可以被拦截。