Почему поведение Matching.ImplementedInterfaces отличается от Matching.ExactType и FrozenAttribute.As?C#

Место общения программистов C#
Ответить
Anonymous
 Почему поведение Matching.ImplementedInterfaces отличается от Matching.ExactType и FrozenAttribute.As?

Сообщение Anonymous »

Рассмотрите следующий код:

Код: Выделить всё

public class TestingSample
{
public class FactoryClass : Class {}

public class Class : IInterface {}

public interface IInterface {}

public class AutoData : AutoDataAttribute
{
public AutoData() : base( Create() ) {}

static IFixture Create()
{
var fixture = new Fixture();
fixture.Customize( composer => composer.FromFactory( () => new FactoryClass() ) );
fixture.Customize( composer => composer.FromFactory( () => new FactoryClass() ) );
return fixture;
}
}

[Theory, TestingSample.AutoData]
public void OldSkool( [Frozen( As = typeof(IInterface) )]Class first, Class second, IInterface third )
{
Assert.IsType( first );
Assert.Same( first, second );
Assert.Same( first, third );
}

[Theory, TestingSample.AutoData]
public void DirectBaseType( [Frozen( Matching.ExactType )]Class first, Class second )
{
Assert.IsType( first );
Assert.Same( first, second );
}

[Theory, TestingSample.AutoData]
public void ImplementedInterfaces( [Frozen( Matching.ImplementedInterfaces )]Class first, IInterface second )
{
Assert.IsType( first );
Assert.Same( first, second ); // The Fails.
}
}
Как вы можете (надеюсь) видеть, тест ImplementedInterfaces не пройден. Поскольку FrozenAttribute.As устарел и пользователям было предложено перейти к перечислению Match, я ожидаю, что он будет вести себя так же, как и раньше.

Однако оказывается, что Match.ImplementedInterfaces ведет себя иначе, чем Match.ExactType и FrozenAttribute.As.

Я так и сделал немного покопался и увидел, что Match.ExactType и FrozenAttribute.As используют SeedRequestSpecification, тогда как Match.ImplementedInterfaces соответствует только запросам Type.

Можно ли получить некоторый контекст этого поведения? Это задумано? И если да, то существует ли известная рекомендация по проектированию таким образом, чтобы восстановить старое поведение с помощью Match.ImplementedInterfaces?

Подробнее здесь: https://stackoverflow.com/questions/348 ... tching-exa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»