README.md

Moq.Extensions

Расширение для библиотеки Moq, позволяющее создавать макеты классов, подменяющие поведение невиртуальных свойств.

nuget version nuget dowmloads counter

Ограничения

Работа с интерфесами

Предположим, что в иерархии типов, для которых предполагается использовать библиотеку, существует такая подиерархия

public interface IEntity
{
    int Id { get; set; }
}

public sealed class User : IEntity
{
  public int Id { get; set; }
  
  public string Login { get; set; }
}

И для быстрого создания макетов сущностей было написано некоторое количество построителей (builder)

public abstract class EntityTestDataBuilder<TEntity, TBuilder> : BaseTestDataBuilder<TEntity, TBuilder>
    where TEntity : class, IEntity
    where TBuilder : EntityTestDataBuilder<TEntity, TBuilder>
{
    public TBuilder WithId(int id)
    {
        return this.RegisterValueForProperty(x => x.Id, id);
    }
}

public sealed class UserTestDataBuilder : EntityTestDataBuilder<User, UserTestDataBuilder>
{  
    public TBuilder WithLogin(string login)
    {
        return this.RegisterValueForProperty(x => x.Login, login);
    }
}

Для описанного выше случая в текущей версии библиотеки существует важное ограничение, для свойства Login значение присваиваться будет, а для Id – нет, так как оно задаётся интерфесом IEntity, а не классом User.

using NUnit.Framework;

[TestFixture]
public class UserTestDataBuilderTests
{
    [Test]
    public void Test()
    {
        // arrange
        var expectedId = 1;
        
        var expectedLogin = "test login";
        
        // act
        var user = new UserTestDataBuilder()
            .With(targerId)
            .WithLogin(targetLogin)
            .Build();
            
        // assert
        Assert.IsNotNull(user);
        Assert.AreEqual(targetLogin, user.Login);
        Assert.AreEqual(targetId, user.Id); // fail here
    }
}

В данный момент проводятся исследования с целью исключения данного ограничения.

Описание

Расширение для библиотеки Moq, позволяющее создавать макеты классов, подменяющие поведение не виртуальных свойств.

Конвейеры
0 успешных
0 с ошибкой