如何在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自动填充属性