Autofixture: рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░реЛрдк рд▓рдЧрд╛рддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдЬреВрди 2013  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

рдореЗрд░реЗ рдбреЛрдореЗрди рдкрд░рдд рдореЗрдВ рд╡рд░реНрдЧ рд╣реИ:

public class Telefone : IEntity
{
    public virtual int Id { get; protected internal set; }
    public virtual string Tipo { get; set; }
    public virtual string Numero { get; set; }
}

рдЖрдИрдбреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ, рдЬреЛ рдЖрдИрдбреА рдмрдирд╛рддрд╛ рд╣реИ рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдкрд░рдд рдореЗрдВ, рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕реЗрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рддреЛ рдореЗрд░реА рдбреЛрдореЗрди рдкрд░рдд рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реАрдЗрдиреНрдлреЛ.рд╕реАрдПрд╕ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реА рдЧрдИ:

[assembly: InternalsVisibleTo("MyTestLayer")]

рдпрд╣ рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рдд рдореЗрдВ рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рд▓реЗрдХрд┐рди рдбреЛрдореЗрди рдкрд░рдд рдореЗрдВ рдирд╣реАрдВ!

рдкрд░реАрдХреНрд╖рдг рдкрд░рдд рдореЗрдВ
рдирдпрд╛ рдЯреЗрд▓реАрдлреЛрди ()ред рдЖрдИрдбреА = 1; // рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!

рдпреВрдЖрдИ рдкрд░рдд рдореЗрдВ
рдирдпрд╛ рдЯреЗрд▓реАрдлреЛрди ()ред рдЖрдИрдбреА = 1; // рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ! рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛!

рд╕рдВрдХрдЯ

var pessoa = fix.Build<Pessoa>()
    .With(p => p.Nome)
    .Do((pess) =>
    {
        fix.Build<Telefone>()
            .With(p => p.Id)
            .With(p => p.Tipo)
            .With(p => p.Numero)
            .OmitAutoProperties()
            .CreateMany(10).ToList().ForEach(pess.Telefones.Add);

        fix.Build<Email>()
            .With(p => p.Id)
            .With(p => p.Tipo)
            .With(p => p.Endereco)
            .OmitAutoProperties()
            .CreateMany(10).ToList().ForEach(pess.Emails.Add);
    })
    .OmitAutoProperties()
    .Create();

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЬрдм рдореЗрд░рд╛ рд░реЛрдб рдЯреЗрд╕реНрдЯ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:

рд╕рдВрдкрддреНрддрд┐ "рдЖрдИрдбреА" рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рд╕рднреА рдЧреБрдг Id s protected internal ред

рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╡рд╣реА рдкрд░реАрдХреНрд╖рдг рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

рдирдпрд╛ рдЯреЗрд▓реАрдлреЛрди ()ред рдЖрдИрдбреА = 1; // рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!
рдирдпрд╛ рдИрдореЗрд▓ ()ред рдЖрдИрдбреА = 1; // рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!

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

рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдбреЛрдореЗрди рдореЙрдбрд▓ рдореЗрдВ рдПрдХ _рд▓реАрдХреА рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди_ рд╣реИред рдПрдХ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реАрдорд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджрд╛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдбреЛрдореЗрди рдореЙрдбрд▓ _not_ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реИред

InternalsVisibleTo рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдСрдЯреЛрдлрд┐рдХреНрд╕реНрдЪрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ _no_ рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХрднреА рднреА рдЖрдкрдХреЗ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░, рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░реВрдВрдЧрд╛:

``` рд╕реА#
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдЯреЗрд▓реАрдлреЛрди: рдЖрдИрдИрдПрдирдЯреАрдЯреА
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЯреЗрд▓реАрдлреЛрди (рдЗрдВрдЯ рдЖрдИрдбреА)
{
рдпрд╣ред рдЖрдИрдбреА = рдЖрдИрдбреА;
}

public virtual int Id { get; private set; }
public virtual string Tipo { get; set; }
public virtual string Numero { get; set; }

}
```

рдЗрд╕рдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╕рд░рдг рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪрд░реНрдЪрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХреАрдВред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:

  1. рдЖрдИрдбреА рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдбреЗрдЯрд╛рдмреЗрд╕, рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдЬрдм рдореИрдВ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реВрдВ, рддреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХреМрди рд╕реА рдЖрдИрдбреА рдкрд╛рд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдЖрдИрдбреА рдХреЛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ред
  3. рдЖрдИрдбреА рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╣реИред рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкрд░рдд рдбреЛрдореЗрди рдХреА рдирд┐рдХрдЯрддрдо рдкрд░рдд рд╣реИред рдЖрдИрдбреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП max (id) + 1 рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рдореЗрд░реА рд╡рд╕реНрддреБ рдХрд╛ рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рддреЛ рдЖрдИрдбреА рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ?
  4. рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдХрдХреНрд╖рд╛ рдХреЗ рднреАрддрд░ рдпрд╛ рдкреНрд░реЙрдХреНрд╕реА/рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ

рдорд╛рдирд╛ рдХрд┐ рдпреЗ рд╕рднреА _рд╕рдорд╕реНрдпрд╛рдПрдВ_ рд╣реИрдВред рдпреЗ рдЪрд╛рд░реЛрдВ _strongly_ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЛрдореЗрди рдореЙрдбрд▓ рджреГрдврд╝рддрд╛ рдкрд░рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  1. рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЖрдИрдбреА рдХреНрдпреЛрдВ рдЕрд╕рд╛рдЗрди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЖрдИрдбреА рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ GUID рд╣реИрдВред
  2. рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХ рдирдпрд╛ рдЧрд╛рдЗрдб рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд╛рд╕ рдХрд░реЗрдВред
  3. рдЖрдИрдбреА рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреНрдпреЛрдВ рд╣реИ? рдЖрдИрдбреА рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╣реЛрдиреЗ рдХрд╛ рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ рд╡рд╛рд╕реНрддреБ рдХрд╛рд░рдг рд╣реЛред
  4. рдорд╛рдирд╛ред рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИред

рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдореИрдВ рдкреАрдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЧреНрд░рд┐рдб рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ рдХрд┐ рд╕рдорд╕реНрдпрд╛ AutoFixture рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдореВрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддрд╛ рд╣реВрдВред

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

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

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

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

zvirja picture zvirja  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

zvirja picture zvirja  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ