我有一个嵌套很深的对象模型,其中一些类可能看起来有点像这样:
class TBase { ... }
class TDerived : TBase { ... }
class Container
{
ICollection<TBase> instances;
...
}
class TopLevel
{
Container container1;
Container container2;
...
}
我想创建我的顶级对象作为测试设备,但我希望所有
TBase
实例(如上面的instances
集合中的)都是TDerived
的实例,而不是TBase
。我想我可以很简单地使用这样的方法:
var fixture = new Fixture();
fixture.Customize<TBase>(c => c.Create<TDerived>());
var model = this.fixture.Create<TopLevel>();
…但这不起作用,因为
Customize
中的lambda表达式是错误的。我想有办法做到这一点,但是autofixture似乎缺少文档,除了作为开发人员博客上的意识流。谁能给我指出正确的方向?
最佳答案
虽然dcastro的答案也是一个选项,但最安全的选项是使用TypeRelay类。
fixture.Customizations.Add(
new TypeRelay(
typeof(TBase),
typeof(TDerived));