21

我只需要使用 System.Type 从 AutoFixture 创建一个对象。但是,似乎没有CreateAnonymous()简单地采用类型的重载。他们都期望编译时通用 T。有没有办法将 System.Type 转换为 T?

编辑使用细节:

我正在使用 AutoMapper,它有一个用于注入组件以支持复杂映射场景的钩子:

void ConstructServicesUsing(System.Func<Type,object> constructor)

从签名中可以看出,客户端可以注册FuncAutoMapper 在需要注入服务(主要是 ValueResolver 实现)时调用的。

在生产构建中,此方法调用我的 StructureMap 容器以检索组件。但是,当对我的映射代码进行单元测试时,我必须提供存根实现,否则 AutoMapper 会引发异常。由于我使用 AutoFixture + Moq 作为我的自动模拟容器,让 AF 新建一个完全水合的存根似乎很自然,这样我就可以专注于编写单元测试代码。

4

2 回答 2

39

这是可能的,但故意隐藏,因为你应该很少需要这样做:

var specimen = new SpecimenContext(fixture).Resolve(type);

AutoFixture 中有大量可扩展点,通常比弱类型的 Create 方法提供更好的替代方案。你想达到什么目的?

于 2013-05-14T15:38:08.213 回答
1

您必须使用反射来创建正确MethodInfo并调用它。请参阅此答案以了解如何执行此操作:如何使用给定的 Type 对象调用泛型方法?

于 2013-05-14T15:15:20.060 回答