Mock for readonly field

1,762 views
Skip to first unread message

lester

unread,
Jan 9, 2016, 9:11:06 AM1/9/16
to NSubstitute
Hi 

  I have a PlayerTokenData whose each property is readonly and only inject via constructor, 
  
  I tried to mock it as the following function with assigned property, but its result is not as my expected. 
 
  Their playerId and brandId produced seems to be generated randomly. How to mock a class with all readonly property and given assigned value.
  

Thanks.


 private static PlayerTokenData CreatePlayerTokenData(Guid playerId, Guid brandId )
        {
            var fixture = new Fixture();
            fixture.Freeze(new PlayerTokenData(1, Guid.NewGuid(), playerId, brandId, "", 0, DateTime.Now, "", "", ""));
            return fixture.Create<PlayerTokenData>();
        }




Lester

lester

unread,
Jan 9, 2016, 9:12:35 AM1/9/16
to NSubstitute
here is PlayerTokenData 
   
    public class PlayerTokenData : BaseTokenData
    {
        private readonly Guid _playerId;
        private readonly Guid _brandId;
        private readonly DateTime _createdOn;
        private readonly string _ip;
        private readonly string _languageCode;
        private readonly string _currencyCode;

        public PlayerTokenData(
            ushort version, 
            Guid tokenId, 
            Guid playerId, 
            Guid brandId,
            string lobbyUrl,
            byte platformType,
            DateTime createdOn, 
            string ip, 
            string languageCode, 
            string currencyCode) : base(version, tokenId)
        {
            _playerId = playerId;
            _brandId = brandId;
            LobbyUrl = lobbyUrl;
            PlatformType = platformType;
            _createdOn = createdOn;
            _ip = ip;
            _languageCode = languageCode;
            _currencyCode = currencyCode;
        }

        public Guid PlayerId { get { return _playerId; } }
        public Guid BrandId { get { return _brandId; } }
        public string LobbyUrl { get; set; }
        public byte PlatformType { get; set; }
        public DateTime CreatedOn { get { return _createdOn; } }
        public string Ip { get { return _ip; } }
        public string LanguageCode { get { return _languageCode; } }
        public string CurrencyCode { get { return _currencyCode; } }
        public override TokenKind Kind { get { return TokenKind.Player; } }
    }

lester於 2016年1月9日星期六 UTC+8下午10時11分06秒寫道:

YiWa

unread,
Jan 10, 2016, 7:43:08 AM1/10/16
to NSubstitute
ISpecimenBuilder can achieve to mock readonly filed as the following.



 var fixture = new Fixture();
 fixture.Customizations.Add(new PlayerTokenDataParameterBuilder(playerId));
 return fixture.Create<PlayerTokenData>();


 public class PlayerTokenDataParameterBuilder : ISpecimenBuilder
        {
            private readonly Guid _playerId;

            public PlayerTokenDataParameterBuilder(Guid playerId)
            {
                _playerId = playerId;
            }

            public object Create(object request, ISpecimenContext context)
            {
                var pi = request as ParameterInfo;
                if (pi != null && pi.Name == "playerId" && pi.ParameterType == typeof(Guid))
                {
                    return _playerId;
                }

                return new NoSpecimen();
            }
        }



YiWa於 2016年1月9日星期六 UTC+8下午10時12分35秒寫道:

David Tchepak

unread,
Jan 12, 2016, 5:08:01 PM1/12/16
to nsubs...@googlegroups.com
NSubstitute can not mock non-virtual properties of a class.

--
You received this message because you are subscribed to the Google Groups "NSubstitute" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nsubstitute...@googlegroups.com.
To post to this group, send email to nsubs...@googlegroups.com.
Visit this group at https://groups.google.com/group/nsubstitute.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages