加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用AutoFixture与NSubstitute的示例

发布时间:2020-12-15 17:38:51 所属栏目:百科 来源:网络整理
导读:我使用NSubstitute很多.我爱它 我只是看AutoFixture.看起来很棒! 我已经看到了AutoFixture for NSubstitute,并在Moq中看到了一些关于如何使用这个功能的例子. 但我似乎无法将其翻译成NSubstitute. 我试过这个: var fixture = new Fixture().Customize(new
我使用NSubstitute很多.我爱它

我只是看AutoFixture.看起来很棒!

我已经看到了AutoFixture for NSubstitute,并在Moq中看到了一些关于如何使用这个功能的例子.

但我似乎无法将其翻译成NSubstitute.

我试过这个:

var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());  
var addDest = Substitute.For<IPerson>();

使用:

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

这也给了我一个没有人口稠密属性的对象. (注意,如果我使用PersonEntity类执行上述操作,则所有属性都将被填充.)

我相信有办法使这项工作,但我似乎找不到.

所以,考虑到我的IPersonEntity接口,有谁知道如何使用AutoFixture和NSubstitute给我一个填充IPersonEntity对象?

解决方法

您可以使用AutoNSubstituteCustomization自定义Fixture实例,而不是使用以下定制:
var fixture = new Fixture().Customize(
    new AutoPopulatedNSubstitutePropertiesCustomization());

var result = fixture.Create<IPersonEntity>();
// -> 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的区别在于,上述定制也是decorated,后处理器实例自动设置所请求类型的所有公共属性的值.

参考文献:

上述解决方案的灵感来自以下博客文章Mark Seemann:

> How to configure AutoMoq to set up all properties
> How to automatically populate properties with AutoMoq

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读