CruiseControl.NET рдореЗрдВ рдХреЛрдб рдХрд╡рд░реЗрдЬ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░реЗрдВ

рдкрд░рд┐рдЪрдп



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

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реЛрдЪрд╛ рдХрд┐ рдХреИрд╕реЗ рдореАрдЯреНрд░рд┐рдХ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдХреНрд░реВрдЬрд╝рдХреЙрдиреНрдЯреНрд░реЛрд▓.рдиреЗрдЯ рдореЗрдВ рдЙрд╕рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, 100% рдХрд╡рд░реЗрдЬ рдмрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рдкреНрд░рддрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░рд╡реИрдпреЗ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред



рдЫрд╡рд┐





рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдмрдирд╛рдиреЗ рдФрд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реВрдЬрд╝рдХрдВрдЯреНрд░реЛрд▓ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЪрд░рдг рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдХрд╡рд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ, рд╡рд░реНрдгрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдХрдВрдкрдиреА Microsoft - MSTest рд╕реЗ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реВрдЬрд╝рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯрдЕрдк рд╣реИред



рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдХреНрд░реВрдЬрд╝рдХрдВрдЯреНрд░реЛрд▓ рдиреЗ рдПрдирд╕реАрдУрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЦрд░реАрджрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рднреА рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред 2008 рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдВрддрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЫреЛрдЯреЗ рд╣реИрдВред



рдПрдХ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ data.coverage рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛



рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдП рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдХреЗ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛред рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ data.coverage рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЗрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ)ред

рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА .testrunconfig рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред UI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдЕрдкрдиреА .testrunconfig рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ
  2. рдбреЗрдЯрд╛ рдФрд░ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
  3. рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  4. рдЙрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд╡рд░реЗрдЬ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
  5. рдЬрдЧрд╣ рдореЗрдВ рдЙрдкрдХрд░рдг рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рдЕрдирдЪреЗрдХ рдХрд░реЗрдВ


рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рдкрд╛рда рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╣реЛрдЧрд╛:



<?xml version="1.0" encoding="UTF-8"?> <TestSettings name="Local Test Run" id="de0d45b4-4fed-4acb-a663-2cfdf0ce4fd7" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> <Description>This is a default test run configuration for a local test run.</Description> <Deployment enabled="false" /> <Execution> <Timeouts testTimeout="300000" /> <TestTypeSpecific> <UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b"> <AssemblyResolution> <TestDirectory useLoadContext="true" /> </AssemblyResolution> </UnitTestRunConfig> </TestTypeSpecific> <AgentRule name="LocalMachineDefaultRole"> <DataCollectors> <DataCollector uri="datacollector://Microsoft/CodeCoverage/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.CodeCoverage.CoveragePlugIn, Microsoft.VisualStudio.QualityTools.Plugins.CodeCoverage, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Code Coverage"> <Configuration> <CodeCoverage xmlns=""> <Regular> <CodeCoverageItem binaryFile="YourProject\bin\Debug\YourProject.dll" pdbFile="YourProject\bin\Debug\YourProject.pdb" /> </Regular> </CodeCoverage> </Configuration> </DataCollector> </DataCollectors> </AgentRule> </Execution> </TestSettings>
      
      





DataCollectors рдЕрдиреБрднрд╛рдЧ рд╕рд┐рд░реНрдл MSTest рдХреЛ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред



рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдХреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:



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



рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдХреНрд░реВрдЬрд╝рдХрдВрдЯреНрд░реЛрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:



 <exec> <executable>C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe</executable> <buildArgs>"/testcontainer:PathToWorkingDirectory\Source\bin\Release\YourTestProject.dll" "/runconfig:PathToYourConfig\localtestrun.testrunconfig" "/resultsfile:PathToWorkingDirectory\TestResults.xml"</buildArgs> <description>Executing MSTest</description> </exec>
      
      







рдпрджрд┐ рдЖрдк рдЕрднреА CruiseControl рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ Path.coWorkingDirectory \ [USERNAME] _ [MACHINE-NAME] [DATE AND TIME] \ In \ "MACHINE-NAME] рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Data.coverage рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдХреНрдпреЛрдВрдХрд┐ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдирд╛рдо рдкрд░ рд╕рдордп рд╣реИ, рдлрд┐рд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, .testrunconfig рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдХреНрд╢рди (<TestSettings> рдХреЗ рдЕрдВрджрд░) рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:



 <NamingScheme baseName="FolderName" appendTimeStamp="false" useDefault="false" />
      
      







рдЕрдм Data.coverage рдлрд╝рд╛рдЗрд▓ PathToWorkingDirectory \ FolderName \ In \ [MACHINE-NAME] рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред



рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, Data.coverage рдлрд╝рд╛рдЗрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреНрд░реВрдЬрд╝рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд╕рд╛рде рдорд╢реАрди рдкрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдЧреАред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдмрд╛рдЗрдирд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ xml рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



XML рдореЗрдВ data.coverage рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВ



рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



 using (CoverageInfo info = CoverageInfo.CreateFromFile(PathToDataCoverageFile)) { CoverageDS data = info.BuildDataSet(); string outputXml = data.GetXml(); File.WriteAllText(PathToOutputXmlCoverageFile,outputXml)); }
      
      







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



рд╣рдорд╛рд░рд╛ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



 <exec> <executable>PathToConverter\Coverage2XmlConverter.exe</executable > <buildArgs>"PathToDataCoverage\data.coverage" "PathToOutputXml\coverage.xml"</buildArgs> <description>Calculation code coverage data</description> </exec>
      
      







рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдирд╛



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



 <merge> <files> <file>PathToResults\TestResult.xml</file> <file>PathToCoverage\coverage.xml</file> </files> </merge>
      
      







рдпрджрд┐ рдЖрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ TestResult.xml рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред



рдмрд┐рд▓реНрдб рдкреГрд╖реНрда рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛



рдпрд╣ рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдкреЗрдЬ рдкрд░ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдПрд╕рдПрд▓рдЯреА рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдмрд┐рд▓реНрдб рдкрд░ рдЬрд╣рд╛рдВ рдХрд╡рд░реЗрдЬ 20% рд╕реЗ рдХрдо рд╣реИ, рдХреЛрдб рдХрд╡рд░реЗрдЬ рд╕рдВрдХреЗрддрдХ рд▓рд╛рд▓ рд╣реЛрдЧрд╛, 20% -50% рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реВрдЪрдХ рдкреАрд▓рд╛ рд╣реЛрдЧрд╛ рдФрд░> 50% рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╣рд░рд╛ рд╣реЛрдЧрд╛ред рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ XSLT рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред



рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдкрд░ рджрд┐рдЦрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╡рд░реЗрдЬ рдХрд╛ рдХреБрд▓ рдореВрд▓реНрдп, рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЕрдм рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЫрд╡рд┐



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ MSTestReport2008.xsl рдХреЛ рдорд╛рдирдХ CruiseControl.NET рд╕реЗрдЯ рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред



рдФрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдореАрдЯреНрд░рд┐рдХ рдХрд╛ рд╡рд┐рд╡рд░рдг рдХреИрд╕рд╛ рд╣реИ:



рдЫрд╡рд┐



рдореИрдВ XSLT рдкрд╛рда рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ GitHub 2 XSLT рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛, рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛.рдСрд╡рд░реЗрдЬ рдлрд╝рд╛рдЗрд▓ рдХреЛ XML рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рдеред



рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдПрдХ рдмрд╛рд░ рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред



All Articles