Autofixture: рдХреНрдпрд╛ рд░рдирдЯрд╛рдЗрдо `System.Type` рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдирд╡ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореЗрд░реЗ рдСрдЯреЛрдореИрдкрд░ рдореИрдкрд┐рдВрдЧ рдореЗрдВ рд╡рд┐рд╕реНрдлреЛрдЯ рди рд╣реЛ, рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рдХреЗ рдЬреИрд╕рд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рд╣реИ:

public class MapperTests
{
    private readonly IMapper _mapper; // from AutoMapper
    private readonly IFixture _fixture;

    public MapperTests()
    {
        _mapper = SetUpAutoMapper();
        _fixture = new Fixture();
    }

    [Theory]
    [InlineData(typeof(Foo), typeof(Bar))]
    [InlineData(typeof(Boo), typeof(Far))]
    // etc ...
    public void CanMapTypes(Type inputType, Type outputType)
    {
        var input = _fixture.Create(inputType);

        // throws exceptions if something's broken:
        _mapper.Map(input, outputType)
    }
}

рдореБрдЭреЗ рдЕрднреА рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ _fixture.Create(inputType) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ Foo ) рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ System.Type рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдХрд╛рдлреА рдмреЗрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦрд╛ (рд╕рд┐рд░реНрдл IntelliSense рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░ рд░рд╣рд╛ рдерд╛) рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреЛрдИ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рдореЗрд░реА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛред рдХреНрдпрд╛ рдореИрдВ рдпрд╣рд╛рдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЙрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ; рдореВрд▓ рд░реВрдк рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдзрдиреНрдпрд╡рд╛рдж!

рдЬреЗрдиреЗрд░рд┐рдХ fixture.Create<T>() рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдХрд░, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдХрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

var input = new SpecimenContext(_fixture).Resolve(sourceType);

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрдореЛрдмреЗрд╢ рд╕рдордХрдХреНрд╖ рд╣реИрдВ :) рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ

рдпрджрд┐ рдЖрдк AutoFixture v4 рдЖрдЬрд╝рдорд╛рддреЗ рд╣реИрдВ , рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА Create() рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдореЗрдВ

```рд╕реА#
_рдлрд┐рдХреНрд╕реНрдЪрд░ред рдмрдирд╛рдПрдВ (рдЗрдирдкреБрдЯ рдЯрд╛рдЗрдк);

It might look that you are making a request of `typeof(Foo)` here, however in reality you are passing this argument as a `seed` and the actual request type is `typeof(Type)`.  To fix the issue please tune a bit your code:

```c#
public class Foo
{
}

[Theory]
[InlineData(typeof(Foo))]
public void TestTypeRequest(Type requestType)
{
    var fixture = new Fixture();
    var result = fixture.Create(requestType, new SpecimenContext(fixture));

    Assert.IsAssignableFrom<Foo>(result);
}

рдПрдкреАрдЖрдИ рд╢рд╛рдпрдж рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХрд╛ рдкрд░рд┐рджреГрд╢реНрдп рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реА

рдзрдиреНрдпрд╡рд╛рдж!

рдЬреЗрдиреЗрд░рд┐рдХ fixture.Create<T>() рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдХрд░, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдХрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

var input = new SpecimenContext(_fixture).Resolve(sourceType);

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрдореЛрдмреЗрд╢ рд╕рдордХрдХреНрд╖ рд╣реИрдВ :) рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

@tlycken рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреЛрдиреЛрдВ рд╕реНрдирд┐рдкреЗрдЯ рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЖрдкрдХрд╛ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИ :) рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: рдмреНрд▓рд╢:

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Accc99 picture Accc99  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gtbuchanan picture gtbuchanan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ploeh picture ploeh  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Ephasme picture Ephasme  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TroyHouston picture TroyHouston  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ