Autofixture: AutoMoq рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╢рд┐рдВрдЧ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдордИ 2016  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

AutoConfiguredMoqCustomization рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рдпреБрдХреНрдд рдлрд┐рдХреНрд╕реНрдЪрд░ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдг рдкрд░ рд╡рд╣реА рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ MockType.ReturnsUsingContext рдпрд╛ рдХрд╣реАрдВ рдФрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рд╡рд╣рд╛рдВ рд▓рд╛рдЗрди 104 рдкрд░)ред

рдореБрдЭреЗ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░рд╢реНрди рдореЗрдВ рдирдХрд▓реА рдХреЗ рдЬрдореЗ рд╣реБрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рд╕реЗрдЯрдЕрдк рдХреЛ рдлрд┐рдХреНрд╕реНрдЪрд░ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ func рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реИ:

someMock.Setup(it => it.SomeMethodReturningAString()).Returns(() => fixture.Create<string>())

рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рд╕реЗ рд╣рд░ рдмрд╛рд░ рдПрдХ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдг рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдСрдЯреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдореЛрдХреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдЯреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдореЛрдХреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп/рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХрд╛ рд╣реИ?

enhancement good first issue

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

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЯреЗрд╕реНрдЯ рдбрдмрд▓реНрд╕ рдХреЛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред AutoFixture рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЖрдЬреАрд╡рди рдкреНрд░рдмрдВрдзрди рддрдВрддреНрд░ рд╣реИ (рдЗрд╕рдХреА рдлрд╝реНрд░реАрдЬрд╝ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ AutoConfiguredMoqCustomization рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдЬреАрд╡рди рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЙрд╕ рдирд┐рдпрдВрддреНрд░рдг рд╕рддрд╣ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ AutoFixture рд╕реНрд╡рдпрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

рдкрд░рд┐рдгрд╛рдо рдорд╛рди рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ _pure_ рдмрдирд╛рдирд╛ рдерд╛, рдЬрд┐рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдкреНрд░рдгрд╛рд▓реА рдПрдХ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдПрдХ рдЕрд╢реБрджреНрдз рдХрд╛рд░реНрдп рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

// This method will return the expected result *if* `GetInt` is pure.
int Double(IDependency dep) {
    return dep.GetInt() + dep.GetInt();
}

Assert.Equal(dep.GetInt * 2, Double(dep));

рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдкреНрд░рдгрд╛рд▓реА рдкрд╡рд┐рддреНрд░рддрд╛ рдирд╣реАрдВ рдорд╛рдирддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╢реБрджреНрдз рдпрд╛ рдЕрд╢реБрджреНрдз рдХрд╛рд░реНрдп рджреЗрдиреЗ рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рддреЛ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЪреВрдХ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ред

рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рд╕реЗ рд╣рд░ рдмрд╛рд░ рдПрдХ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдг рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдСрдЯреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдореЛрдХреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдЯреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдореЛрдХреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп/рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХрд╛ рд╣реИ?

рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ _one_ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХрд╛рдзрд┐рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп IConfiguration рдореЗрдВ рдбрд╛рд▓реВрдВрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдХрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  • ReturnsUsingContext рдПрдХ рдирдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (IIRC, рдЖрдк рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрдВрдХреНрддрд┐ 104 рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ)
  • MockVirtualMethodsCommand рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреЙрд▓ рдХреЛ рдЕрдкрдиреА рдирдИ рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЙрд▓ рдХреЗ рд╕рд╛рде ReturnsUsingContext рдмрджрд▓реЗрдВред
  • AutoConfiguredMoqCustomization рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ MockVirtualMethodsCommand рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрдЯреЗрд╢рди рдХреЛ рдЕрдкрдиреА рдирдИ рдХрдХреНрд╖рд╛ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрдЯреЗрд╢рди рд╕реЗ рдмрджрд▓реЗрдВред

рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдорд╛рдВрдЧ рдХреЛ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЛ рд╣рд▓реНрдХреЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ - рдмрд╛рд░реАрдХ рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдЖрдХрд╕реНрдорд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред @ploeh , рдЗрд╕ рдкрд░ рдЖрдкрдХреЗ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ?

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЯреЗрд╕реНрдЯ рдбрдмрд▓реНрд╕ рдХреЛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред AutoFixture рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЖрдЬреАрд╡рди рдкреНрд░рдмрдВрдзрди рддрдВрддреНрд░ рд╣реИ (рдЗрд╕рдХреА рдлрд╝реНрд░реАрдЬрд╝ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ AutoConfiguredMoqCustomization рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдЬреАрд╡рди рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЙрд╕ рдирд┐рдпрдВрддреНрд░рдг рд╕рддрд╣ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ AutoFixture рд╕реНрд╡рдпрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ Freeze рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рд╕реЛрдЪрд╛ред рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдЕрдм рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ... рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ AutoFixture v4 рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдХреНрдпрд╛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ 'рд╡рд╛рджрд╛' рдХрд┐рдпрд╛ рд╣реИ?

рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, рдирд╣реАрдВред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд╡рд░ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдРрд╕рд╛ рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рдЗрд╕реЗ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реЛ, рдФрд░ рдЙрд╕ рд░реЗрдЦрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдИрдПрдордУ, рдпрд╣ рдЕрднреА рднреА рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХреЛрдб рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ ...

рдирд┐рд╖реНрдкрдХреНрд╖ рдмрд┐рдВрджреБред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рдПрдХ рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЬрдм рд╣рдо AutoFixture 4 рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдорд╛рдирд╛ред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ? рдХреНрдпрд╛ рдЗрд╕реЗ MockType рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдХреЙрдиреНрд╕ рддрдХ рдЙрдард╛рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛? рдЬреИрд╕реЗ, private const bool cacheReturnValues = true рдФрд░ рдлрд┐рд░ if(cacheReturnValues) /**/

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдлрд╛рд▓рддреВ рдЯрд┐рдкреНрдкрдгреА рдереА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдерд╛:

@andreasnilsen рдЕрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо @andreasnilsen рдХреЛ рдЕрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рджреЗрдВрдЧреЗ, рдЬрдмрдХрд┐ рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝реЗрдВрдЧреЗред

рдЬрдм рд╣рдо AutoFixture 4 рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╣реЛ рдХрд┐ рд╡рд╛рдкрд╕реА рдорд╛рди рдХреИрд╢реНрдб рдирд╣реАрдВ рд╣реИрдВред рдпрд╛ рд╢рд╛рдпрдж рд╣рдо рдЙрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╣рдЯрд╛ рджреЗрдВ...

рдмреВрд▓рд┐рдпрди рдЬреИрд╕рд╛ рдХреБрдЫ cacheReturnValues рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдореВрд▓реНрдп рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ private рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред

(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдХреЗрд╡рд▓ рдареАрдХ рджреЛ рдореВрд▓реНрдпреЛрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП enum рдПрдХ рдХреЗ рдмрдЬрд╛рдп bool ред)

рдЖрд╣, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдзреНрд╡рдЬ рд╣реИ рдЬреЛ рдХрд┐ v4 рдореЗрдВ рд╕реНрдкреЙрдЯ рдХрд░рдирд╛ рдФрд░ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рдерд╛ред

рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ:

  • AutoConfiguredMoqCustomization рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдмрд╕ рдПрдХ рдмреВрд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░ (рдмреИрдХрд╡рд░реНрдб рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ) рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ MockVirtualMethodsCommand рдФрд░ рдЖрдВрддрд░рд┐рдХ MockType.ReturnsUsingContext рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ:

    1. рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрд╛ рд╣реБрдЖ рдФрд░

    2. рднреА _рддрджрд░реНрде_. рдпрджрд┐ рд╣рдо рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдФрд░ рдЙрдкрдпреЛрдЧ / рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

  • рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ (ii) рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореИрдВ рдРрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд╣реВрдБ рдЬрд┐рдирдХрд╛ рд╣рдореЗрдВ рдкрдЫрддрд╛рд╡рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЕрдЯрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдЖрдкрдХреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛/рдЕрдиреБрднрд╡ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдореИрдВ рдПрдХ рд░рдгрдиреАрддрд┐ рдХреА рддрд░рд╣ рдХреБрдЫ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ ...

рдЖрд╣ рд╣рд╛рдБ, рдмрд┐рд▓реНрдХреБрд▓! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди" рдкрд░ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдХ рдХрджрдо рдкреАрдЫреЗ рд╣рдЯрдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред

рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рдореИрдВ рдмрд╣ рдЧрдпрд╛ рд╣реВрдБ - рдореИрдВ рдЬрд▓реНрдж рд╣реА рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реВрдБрдЧрд╛ рдФрд░ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖрдКрдБрдЧрд╛ред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣рдордиреЗ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди рдЯреНрд╡рд┐рдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдмреЗрд╣рддрд░ рд╕реЗрдЯрд┐рдВрдЧ рдирд╛рдо рдЦреЛрдЬреЗрдВ):
c# new AutoMoqCustomization { CacheCallResults = false }

рд╣реБрдб рдХреЗ рддрд╣рдд рд╣рдо рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдгрдиреАрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдКрдкрд░ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рд╣реИред

рдЯреИрдЧ рдореЗрдВ рдПрдХ рдЫрд▓рд╛рдВрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@zvirja рдХреНрдпрд╛ рдЖрдк рдореЗрд░реА рдереЛрдбрд╝реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ :)

@micheleissa рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдХреЗрд╡рд▓ AutoMoq рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрдирд╛ рдЪрд╛рд╣рд┐рдП...

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдкреВрдЫреЗрдВ

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

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

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

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

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

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

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