如何在NSubstitute中使用AutoFixture的示例
我经常使用NSubstitute。 我喜欢它。
我只是在研究AutoFixture。 看起来很棒!
我见过NSFstitute的AutoFixture,并在Moq中看到了一些如何使用此function的例子。
但我似乎无法将其翻译成NSubstitute。
我试过这个:
var fixture = new Fixture().Customize(new AutoNSubstituteCustomization()); var addDest = Substitute.For();
使用:
public interface IPersonEntity { int ID { get; set; } string FirstName { get; set;} string LastName { get; set;} DateTime DateOfBirth { get; set; } char Gender { get; set; } }
我得到一个对象,但没有填充任何属性(类似于AutoFixture的点)。
我也尝试过:
var fixture = new Fixture().Customize(new AutoNSubstituteCustomization()); var result = fixture.Create();
这也给了我一个没有填充属性的对象。 (注意如果我使用PersonEntity
类执行上述PersonEntity
,则会填充所有属性。)
我确信有一种方法可以使这项工作,但我似乎无法找到它。
所以,鉴于我上面的IPersonEntity
界面,有没有人知道如何使用AutoFixture和NSubstitute来给我一个填充的IPersonEntity对象?
您可以使用以下自定义,而不是使用AutoNSubstituteCustomization
自定义Fixture
实例:
var fixture = new Fixture().Customize( new AutoPopulatedNSubstitutePropertiesCustomization()); var result = fixture.Create(); // -> All properties should be populated now.
AutoPopulatedNSubstitutePropertiesCustomization
定义为:
internal class AutoPopulatedNSubstitutePropertiesCustomization : ICustomization { public void Customize(IFixture fixture) { fixture.ResidueCollectors.Add( new Postprocessor( new NSubstituteBuilder( new MethodInvoker( new NSubstituteMethodQuery())), new AutoPropertiesCommand( new PropertiesOnlySpecification()))); } private class PropertiesOnlySpecification : IRequestSpecification { public bool IsSatisfiedBy(object request) { return request is PropertyInfo; } } }
与AutoNSubstituteCustomization
的不同之AutoNSubstituteCustomization
在于,上述自定义还使用Postprocessor
实例进行修饰 ,以自动为所请求类型的所有公共属性设置值。
参考文献 :
以上解决方案的灵感来自Mark Seemann的以下博客文章:
- 如何配置AutoMoq以设置所有属性
- 如何使用AutoMoq自动填充属性