Microsoft рдореЛрд▓реНрд╕ рдЕрд▓рдЧрд╛рд╡ рдврд╛рдВрдЪрд╛, рдЧрд╣рд░реА рдЦреБрджрд╛рдИ

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

рдХреНрдпреЛрдВ?


рдкрд╣рд▓реЗ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдХрд┐ Microsoft рдХрд┐рд╕ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИред рд╣рдорд╛рд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╣ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд▓рдХреНрд╖реНрдп рд╣реИрдВ, рддреЛ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдпрд╣ рдереЛрдбрд╝рд╛ рддрд╛рдЬрд╝рд╛ рд╣реИред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ - рдЖрдк рдЕрдЧрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?
рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ

рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖрддреА рд╣реИрдВ

рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдЯреВрд▓рдХрд┐рдЯред

рдлрд┐рд▓рд╣рд╛рд▓, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдпреЛрдЬрдиреЛрдВ (рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ, рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЯреЗрд╕реНрдЯ, рдлрд╝рдВрдХреНрд╢рдирд▓ рдЯреЗрд╕реНрдЯ, рдпреВрдЖрдИ рдЯреЗрд╕реНрдЯ) рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреМрдЦрдЯреЗ (NUnit, JUnit, DUnit, xUnit, MSTest) рдореМрдЬреВрдж рд╣реИрдВред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рдкреВрд░реНрдг рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рддрд░реНрдХ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдкреВрд░реНрдг рдЕрд▓рдЧрд╛рд╡ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЯреНрд░рд┐рдХреЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рдмрд╛рджрд▓ рдмрдирд╛рдирд╛, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдФрд░ рдпрд╣рд╛рдВ рдЕрд▓рдЧрд╛рд╡ рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ Microsoft рдореЛрд▓реНрд╕ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

Microsoft.Moles рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?


рдореИрдВ рдЙрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореЛрд▓реНрд╕ рд╣рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдХрдард┐рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдЗрд╕рдореЗрдВ рдореЛрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдерд╛)ред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ FileUpdater рд╡рд░реНрдЧ рд╣реИ, рдПрдХрдорд╛рддреНрд░ UpdateFileFromService (string fileId) рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдп рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рд╣реИ, рдпрджрд┐ рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдлрд╝рд╛рдЗрд▓ hasha рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, UpdateFileFromService рд╡рд┐рдзрд┐ рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП FileManager рдФрд░ StorageService рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ FileManager рдФрд░ StorageService рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рджреЗрддрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред

public class FileUpdater
{
private StorageService storageService;

public StorageService Service
{
get
{
if (storageService == null )
{
storageService = new StorageService();
}
return storageService;
}
}

public void UpdateFileFromService( string fileId)
{
if ( string .IsNullOrEmpty(fileId))
{
throw new Exception( "fileId is empty" );
}
var fileManager = new FileManager();
string localFileHash = fileManager.GetFileHash(fileId);
string remoteFileHash = Service.GetFileHash(fileId);
if (localFileHash != remoteFileHash)
{
FileStream file = Service.DownloadFile(fileId);
fileManager.SaveFile(fileId, remoteFileHash, file);
}
}
}

public class FileManager
{
public string GetFileHash( string fileId)
{
throw new NotImplementedException();
}

public void SaveFile( string fileId, string remoteFileHash, FileStream file)
{
throw new NotImplementedException();
}
}

public class StorageService
{
public string GetFileHash( string fileId)
{
throw new NotImplementedException();
}

public FileStream DownloadFile( string fileId)
{
throw new NotImplementedException();
}
}


* This source code was highlighted with Source Code Highlighter .


UpdateFileFromService рд╡рд┐рдзрд┐ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ :
  1. fileId - рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ
  2. рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдлрд╝рд╛рдЗрд▓ рд╣реИрд╢ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ
  3. рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдлрд╝рд╛рдЗрд▓ рд╣реИрд╢ рд╕рдорд╛рди рд╣реИрдВ
рд╣рдо рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рд╛рдЗрд▓рдЕрдкрдбреЗрдЯ рд╢реНрд░реЗрдгреА рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрдирдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдЖрдЗрдП Microsoft.Moles рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ 2 рдФрд░ 3 рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рдердорд┐рдХ рд╣реИред

рдореЛрд▓ рдФрд░ рд╕реНрдЯрдм рдХреНрд▓рд╛рд╕ рдЬрдирд░реЗрд╢рди

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЛрд▓реЗрдб рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рддрд░реНрдХ рд╣рдо рдХрд╕реНрдЯрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ (рдЕрдиреНрдпрдерд╛ рд╕реНрдЯрдм рд╡рд┐рдзрд┐рдпреЛрдВ) рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдВрдЧреЗред рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдореЛрд▓ред Exe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ Microsoft.Moles рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрдирд╛ рдкреИрдХреЗрдЬ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде Visual Studio 2010/2010 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рд╣рдо рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, Microsoft.Moles рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдВрджрд░реНрдн рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдЖрдЗрдЯрдо "рдРрдб рдореЛрд▓реНрд╕ рдЕрд╕реЗрдВрдмрд▓реА" рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ (рдЪрд┐рддреНрд░ 1)ред



ClassLibrary1 рдЕрд╕реЗрдВрдмрд▓реА рдкрд░ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ ClassLibrary1.moles рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЫрд╡рд┐ 2) рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдореВрд╣ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ ClassLibrary1.moles рдлрд╝рд╛рдЗрд▓ рдореЛрд▓рдб рдЕрд╕реЗрдВрдмрд▓реА рд╡рд┐рд╡рд░рдгрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреА рдкреАрдврд╝реА рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рдХреА рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдб рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред



Microsoft.Moles рдЖрдкрдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рд╕реНрдЯрдмреНрд╕ рдФрд░ рдореЛрд▓реНрд╕ред
рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдереЗ, рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реБрдИред
рдЕрд╕реЗрдВрдмрд▓реА ClassLibrary1.Moles.dll рдЙрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП M M рдХреНрд▓рд╛рд╕ ClassName% рдФрд░ S% ClassName% рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬреЛрдбрд╝рд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЕрд╕реЗрдВрдмрд▓реА ClassLibrary1.dll рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЬрд╣рд╛рдВ:

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ ClassLibrary1.moles рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЛрд▓реНрд╕ рдпрд╛ рд╕реНрдЯрдмреНрд╕ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ (рдЬреЛ рдкреАрдврд╝реА рдХреЗ рд╕рдордп рдХреЛ рдмрд╣реБрдд рдХрдо рдХрд░ рджреЗрдВрдЧреЗ) рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдореЛрд▓реНрд╕ рдпрд╛ рд╕реНрдЯрдмреНрд╕ рдХреА рдкреАрдврд╝реА рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рд╕реЗрдЯ рдХрд░реЗрдВред рдкреАрдврд╝реА рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ (Intellisence рдЖрдкрдХреЛ рдорд╛рдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреА рдПрдХ рд╕реВрдЪреА рдмрддрд╛рдПрдЧрд╛)ред рдЬрдм рдЖрдк moles.exe рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк ClassLibrary1.moles рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛ moles.exe рдЪрд▓рд╛рдХрд░ moles.exe рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред

рддрд┐рд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЪреВрдВрдХрд┐ рдореЛрд▓реНрд╕ рдФрд░ рд╕реНрдЯрдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рдФрд░ рд▓реЗрдЦ Microsoft.Moles рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд╣рдо рдХреЗрд╡рд▓ рдореЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд рдЙрддреНрдкрдиреНрди рддрд┐рд▓ рдФрд░ рд╕реНрдЯрдм рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ - рдкрд╣рд▓реЗ рдореВрд▓ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдХрд╛ рдирд╛рдо рдЖрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MFileManager.AllInstances.GetFileHashString FileManager.GetFileHash (string fileId) рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рдЧреБрдг рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢реИрд▓реА рдЕрддрд┐рднрд╛рд░рд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╕рджрд╕реНрдпреЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИред
рдореЛрд▓ рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ:

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

InstanceBehavior

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

рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдг

рдпрд╣рд╛рдВ рд╕реНрдерд┐рддрд┐ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╣реИрд╢ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред
///
/// ,
///
[TestMethod]
[HostType( "Moles" )]
public void TestUpdateFileNonMatchedHash()
{
var callOrder = 0; //
var testFileId = Guid .NewGuid().ToString();
var testLocalHash = Guid .NewGuid().ToString();
var testRemoteHash = Guid .NewGuid().ToString();
var testFileStream = new FileStream ( @"c:\testfile.txt" , FileMode .OpenOrCreate);

var storageServiceMole = new MStorageService() { InstanceBehavior = MoleBehaviors.Fallthrough };
// GetFileHash StorageService
storageServiceMole.GetFileHashString = (fileId) =>
{
Assert.AreEqual(1, callOrder++); //
Assert.AreEqual(testFileId, fileId);
Assert.AreNotEqual(testLocalHash, testRemoteHash);
return testRemoteHash;
};
storageServiceMole.DownloadFileString = (fileId) =>
{
Assert.AreEqual(2, callOrder++);
Assert.AreEqual(testFileId, fileId);
return testFileStream;
};
// FileManager.
//MFileManager.AllInstances FileManager UpdateFile
// ,
// FileManager
MFileManager.AllInstances.GetFileHashString = (fileManager, fileId) =>
{
Assert.AreEqual(0, callOrder++);
Assert.AreEqual(testFileId, fileId);
return Guid .NewGuid().ToString();
};
MFileManager.AllInstances.SaveFileStringStringFileStream = (fileManager, fileId, fileHash, fileStream) =>
{
Assert.AreEqual(3, callOrder++);
Assert.AreEqual(testFileId, fileId);
Assert.AreEqual(testRemoteHash, fileHash);
Assert.AreSame(testFileStream, fileStream);
};
var fileUpdaterMole = new MFileUpdater
{
InstanceBehavior = MoleBehaviors.Fallthrough,
// getter FileUpdater.Service , moled StorageService
ServiceGet = () => storageServiceMole.Instance
};
var fileUpdater = fileUpdaterMole.Instance;

fileUpdater.UpdateFileFromService(testFileId);
}


* This source code was highlighted with Source Code Highlighter .


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

рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА



рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкреНрдд рдХрд░ рджреВрдВрдЧрд╛, рдЕрдЧрд░ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рдП рддреЛ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ


Microsoft рдореЛрд▓реНрд╕ рд╕рдВрджрд░реНрдн рдореИрдиреБрдЕрд▓
NUnit, NAnt рдФрд░ .NET 3.5 рдХреЗ рд╕рд╛рде MS рдореЛрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
MSDN - рдореЛрд▓реНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ

Source: https://habr.com/ru/post/In101408/


All Articles