我有一个嵌套很深的对象模型,其中一些类可能看起来有点像这样:

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));

08-25 23:26