Izolowanie testowanego kodu za pomocą struktury Microsoft FakesIsolate code under test with Microsoft Fakes

Sztuczne firmy Microsoft ułatwiają Izolowanie testowanego kodu przez zastąpienie innych części aplikacji za pomocą wycinków lub podkładek.Microsoft Fakes helps you isolate the code you are testing by replacing other parts of the application with stubs or shims. Są to małe fragmenty kodu, będące pod kontrolą Twoich testów.These are small pieces of code that are under the control of your tests. Izolując kod do testowania, wiesz, że jeśli test wypadnie niepomyślnie, przyczyna leży tam, a nie w żadnym innym miejscu.By isolating your code for testing, you know that if the test fails, the cause is there and not somewhere else. Podkładki i wycinki pozwalają na testowanie kodu, nawet jeśli pozostałe części aplikacji jeszcze nie działają.Stubs and shims also let you test your code even if other parts of your application are not working yet.

Podróbki występują w dwóch wersjach:Fakes come in two flavors:

  • Procedura zastępcza zastępuje klasę niewielkim substytutem, który implementuje ten sam interfejs.A stub replaces a class with a small substitute that implements the same interface. Aby użyć wycinków, należy tak zaprojektować aplikację, aby każdy składnik zależał jedynie od interfejsów, a nie od innych składników.To use stubs, you have to design your application so that each component depends only on interfaces, and not on other components. (Przez „składnik” rozumie się klasy lub grupy klas, które są zaprojektowane i aktualizowane łącznie i zwykle są zawarte w zestawie).(By "component" we mean a class or group of classes that are designed and updated together and typically contained in an assembly.)

  • Podkładka modyfikuje skompilowany kod aplikacji w czasie wykonywania, tak że zamiast wykonywania określonego wywołania metody jest uruchamiany kod podkładki, który zapewnia test.A shim modifies the compiled code of your application at run time so that instead of making a specified method call, it runs the shim code that your test provides. Podkładki mogą służyć do zastępowania wywołań do zestawów, których nie można modyfikować, takich jak zestawy .NET.Shims can be used to replace calls to assemblies that you cannot modify, such as .NET assemblies.

Elementy sztuczne zastępują inne składniki

WymaganiaRequirements

  • Visual Studio EnterpriseVisual Studio Enterprise
  • Projekt .NET FrameworkA .NET Framework project

Uwaga

  • Profilowanie za pomocą programu Visual Studio nie jest dostępne dla testów korzystających z elementów sztucznych firmy Microsoft.Profiling with Visual Studio is not available for tests that use Microsoft Fakes.

Wybór między elementami zastępczymi i typami podkładkiChoose between stub and shim types

Projekt Visual Studio zazwyczaj zostanie zakwalifikowany jako składnik, ponieważ klasy te są opracowywane i aktualizowane równocześnie.Typically, you would consider a Visual Studio project to be a component, because you develop and update those classes at the same time. Można rozważyć użycie wycinków i podkładek do wywołań, które dany projekt kieruje w stronę innych projektów w rozwiązaniu, lub w stronę innych zestawów, do których projekt się odnosi.You would consider using stubs and shims for calls that the project makes to other projects in your solution, or to other assemblies that the project references.

Jako ogólnej wskazówki należy użyć fragmentów dla wywołań w ramach rozwiązania Visual Studio i podkładek dla wywołań do innych zestawów, do których istnieje odwołanie.As a general guide, use stubs for calls within your Visual Studio solution, and shims for calls to other referenced assemblies. Dzieje się tak, ponieważ wewnątrz własnego rozwiązania warto ćwiczyć rozdzielanie par składników przez definiowanie interfejsów w sposób wymagany przez wycinkowanie.This is because within your own solution it is good practice to decouple the components by defining interfaces in the way that stubbing requires. Ale zestawy zewnętrzne, takie jak System.dll zwykle nie są dostarczane z oddzielnymi definicjami interfejsów, dlatego należy zamiast tego użyć podkładek.But external assemblies such as System.dll typically are not provided with separate interface definitions, so you must use shims instead.

Inne zagadnienia to:Other considerations are:

Skuteczności.Performance. Podkładki działają wolniej, ponieważ przepisują kod w czasie wykonywania.Shims run slower because they rewrite your code at run time. Wycinki kodu nie mają dodatkowego obciążenia i są równie szybkie, jak metody wirtualne.Stubs do not have this performance overhead and are as fast as virtual methods can go.

Metody statyczne, typy zapieczętowane.Static methods, sealed types. Możesz używać wycinków tylko do implementacji interfejsów.You can only use stubs to implement interfaces. Tym samym typy wycinka nie mogą być stosowane dla metod statycznych, metod niewirtualnych, zaplombowanych metod wirtualnych, metod w zaplombowanych typach itd.Therefore, stub types cannot be used for static methods, non-virtual methods, sealed virtual methods, methods in sealed types, and so on.

Typy wewnętrzne.Internal types. Zarówno elementy zastępcze, jak i podkładki mogą być używane z wewnętrznymi typami, które są dostępne za pomocą atrybutu Assembly InternalsVisibleToAttribute .Both stubs and shims can be used with internal types that are made accessible by using the assembly attribute InternalsVisibleToAttribute.

Metody prywatne.Private methods. Podkładki zastępują wywołania metod prywatnych, jeśli widoczne są wszystkie typy podpisów metody.Shims can replace calls to private methods if all the types on the method signature are visible. Wycinki kodu mogą zastąpić jedynie metody widoczne.Stubs can only replace visible methods.

Interfejsy i metody abstrakcyjne.Interfaces and abstract methods. Wycinki kodu zapewniają implementacje interfejsów i metody abstrakcyjne, które mogą służyć do testowania.Stubs provide implementations of interfaces and abstract methods that can be used in testing. Podkładki nie mogą instrumentować interfejsów i metod abstrakcyjnych, ponieważ nie zawierają treści metody.Shims can't instrument interfaces and abstract methods, because they don't have method bodies.

Zasadniczo zaleca się używanie typów wycinków w celu odseparowania od zależności w ramach własnej bazy kodów.In general, we recommend that you use stub types to isolate from dependencies within your codebase. Można to zrobić, ukrywając składniki za interfejsami.You can do this by hiding the components behind interfaces. Typy podkładek można wykorzystywać do izolowania od składników innych firm, które nie mają sprawdzalnego API.Shim types can be used to isolate from third-party components that do not provide a testable API.

Wprowadzenie do wycinkówGet started with stubs

Aby uzyskać bardziej szczegółowy opis, zobacz Używanie wycinków do izolowania części aplikacji od siebie do testowania jednostkowego.For a more detailed description, see Use stubs to isolate parts of your application from each other for unit testing.

  1. Wsuń interfejsyInject interfaces

    Aby użyć wycinków, musisz napisać kod, który chcesz przetestować w taki sposób, aby nie wymieniał wprost klas w innych składnikach Twojej aplikacji.To use stubs, you have to write the code you want to test in such a way that it does not explicitly mention classes in another component of your application. Przez „składnik” rozumie się klasę lub grupę klas, które są opracowane i aktualizowane łącznie i zwykle są zawarte w jednym projekcie Visual Studio.By "component" we mean a class or classes that are developed and updated together, and typically contained in one Visual Studio project. Zmienne i parametry powinny być zdeklarowane przy użyciu interfejsów, a wystąpienia innych składników powinny zostać przekazane lub utworzone za pomocą fabryki.Variables and parameters should be declared by using interfaces and instances of other components should be passed in or created by using a factory. Jeśli na przykład StockFeed jest klasą w innym składniku aplikacji, zostałoby to uznane za nieprawidłowe:For example, if StockFeed is a class in another component of the application, then this would be considered bad:

    return (new StockFeed()).GetSharePrice("COOO"); // Bad

    Zamiast tego zdefiniuj interfejs, który może być implementowany przez inny składnik, a także przez wycinek dla celów testowych:Instead, define an interface that can be implemented by the other component, and which can also be implemented by a stub for test purposes:

    public int GetContosoPrice(IStockFeed feed) => feed.GetSharePrice("COOO");
    
    Public Function GetContosoPrice(feed As IStockFeed) As Integer
     Return feed.GetSharePrice("COOO")
    End Function
    
    
  2. Dodaj zestaw elementów sztucznychAdd Fakes Assembly

    1. W Eksplorator rozwiązań ,In Solution Explorer ,

      • W przypadku starszego projektu .NET Framework (styl inny niż zestaw SDK) rozwiń węzeł odwołania projektu testów jednostkowych.For an older .NET Framework Project (non-SDK style), expand your unit test project's References node.
      • W przypadku projektu w stylu zestawu SDK .NET Framework lub .NET Core rozwiń węzeł zależności , aby znaleźć zestaw, który ma zostać sfałszowany w ramach zestawów , projektów lub pakietów.For an SDK-style project targeting .NET Framework or .NET Core, expand the Dependencies node to find the assembly you would like to fake under Assemblies , Projects , or Packages.
      • Jeśli pracujesz w Visual Basic, wybierz pozycję Pokaż wszystkie pliki na Eksplorator rozwiązań pasku narzędzi, aby wyświetlić węzeł odwołania .If you're working in Visual Basic, select Show All Files in the Solution Explorer toolbar to see the References node.
    2. Wybierz zestaw, który zawiera definicje klas, dla których chcesz utworzyć podkładki.Select the assembly that contains the class definitions for which you want to create shims. Na przykład, jeśli chcesz określić datę i godzinę dla podkładki, wybierz pozycję System.dll.For example, if you want to shim DateTime , select System.dll.

    3. W menu skrótów wybierz polecenie Dodaj elementy sztuczne.On the shortcut menu, choose Add Fakes Assembly.

  3. W testach należy skonstruować wystąpienia wycinka i podać kod dla jego metody:In your tests, construct instances of the stub and provide code for its methods:

    [TestClass]
    class TestStockAnalyzer
    {
        [TestMethod]
        public void TestContosoStockPrice()
        {
          // Arrange:
    
            // Create the fake stockFeed:
            IStockFeed stockFeed =
                 new StockAnalysis.Fakes.StubIStockFeed() // Generated by Fakes.
                     {
                         // Define each method:
                         // Name is original name + parameter types:
                         GetSharePriceString = (company) => { return 1234; }
                     };
    
            // In the completed application, stockFeed would be a real one:
            var componentUnderTest = new StockAnalyzer(stockFeed);
    
          // Act:
            int actualValue = componentUnderTest.GetContosoPrice();
    
          // Assert:
            Assert.AreEqual(1234, actualValue);
        }
        ...
    }
    
    <TestClass()> _
    Class TestStockAnalyzer
    
        <TestMethod()> _
        Public Sub TestContosoStockPrice()
            ' Arrange:
            ' Create the fake stockFeed:
            Dim stockFeed As New StockAnalysis.Fakes.StubIStockFeed
            With stockFeed
                .GetSharePriceString = Function(company)
                                           Return 1234
                                       End Function
            End With
            ' In the completed application, stockFeed would be a real one:
            Dim componentUnderTest As New StockAnalyzer(stockFeed)
            ' Act:
            Dim actualValue As Integer = componentUnderTest.GetContosoPrice
            ' Assert:
            Assert.AreEqual(1234, actualValue)
        End Sub
    End Class
    
    

    Specjalna część Magic jest klasą StubIStockFeed .The special piece of magic here is the class StubIStockFeed. Dla każdego interfejsu w zestawie, do którego istnieje odwołanie, mechanizm Microsoft Fakes generuje klasę zastępczą.For every interface in the referenced assembly, the Microsoft Fakes mechanism generates a stub class. Nazwa klasy zastępczej pochodzi od nazwy interfejsu, z " Fakes.Stub " jako prefiksem i dołączonymi nazwami typu parametru.The name of the stub class is derived from the name of the interface, with "Fakes.Stub" as a prefix, and the parameter type names appended.

    Wycinki kodu są generowane także dla metod pobierających i ustawiających właściwości, dla zdarzeń i metod ogólnych.Stubs are also generated for the getters and setters of properties, for events, and for generic methods. Aby uzyskać więcej informacji, zobacz Używanie wycinków do izolowania części aplikacji od siebie do testowania jednostkowego.For more information, see Use stubs to isolate parts of your application from each other for unit testing.

Wprowadzenie do podkładkiGet started with shims

(Aby uzyskać bardziej szczegółowy opis, zobacz Używanie podkładki do izolowania aplikacji od innych zestawów do testowania jednostek).(For a more detailed description, see Use shims to isolate your application from other assemblies for unit testing.)

Załóżmy, że składnik zawiera wywołania DateTime.Now :Suppose your component contains calls to DateTime.Now:

// Code under test:
    public int GetTheCurrentYear()
    {
       return DateTime.Now.Year;
    }

Podczas testowania chcesz zmienić podkładkę na Now Właściwość, ponieważ rzeczywista wersja niewygodnie zwraca inną wartość przy każdym wywołaniu.During testing, you would like to shim the Now property, because the real version inconveniently returns a different value at every call.

Aby używać podkładek, nie trzeba modyfikować kodu aplikacji ani pisać go w określony sposób.To use shims, you don't have to modify the application code or write it a particular way.

  1. Dodaj zestaw elementów sztucznychAdd Fakes Assembly

    W Eksplorator rozwiązań Otwórz odwołania do projektu testu jednostkowego i wybierz odwołanie do zestawu, który zawiera metodę, która ma zostać sfałszowana.In Solution Explorer , open your unit test project's references and select the reference to the assembly that contains the method you want to fake. W tym przykładzie DateTime Klasa jest w System.dll.In this example, the DateTime class is in System.dll. Aby wyświetlić odwołania w projekcie Visual Basic, wybierz Pokaż wszystkie pliki.To see the references in a Visual Basic project, choose Show All Files.

    Wybierz pozycję Dodaj zestaw elementów sztucznych.Choose Add Fakes Assembly.

  2. Wstaw podkładkę w ShimsContextInsert a shim in a ShimsContext

    [TestClass]
    public class TestClass1
    {
            [TestMethod]
            public void TestCurrentYear()
            {
                int fixedYear = 2000;
    
                // Shims can be used only in a ShimsContext:
                using (ShimsContext.Create())
                {
                  // Arrange:
                    // Shim DateTime.Now to return a fixed date:
                    System.Fakes.ShimDateTime.NowGet =
                    () =>
                    { return new DateTime(fixedYear, 1, 1); };
    
                    // Instantiate the component under test:
                    var componentUnderTest = new MyComponent();
    
                  // Act:
                    int year = componentUnderTest.GetTheCurrentYear();
    
                  // Assert:
                    // This will always be true if the component is working:
                    Assert.AreEqual(fixedYear, year);
                }
            }
    }
    
    <TestClass()> _
    Public Class TestClass1
        <TestMethod()> _
        Public Sub TestCurrentYear()
            Using s = Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create()
                Dim fixedYear As Integer = 2000
                ' Arrange:
                ' Detour DateTime.Now to return a fixed date:
                System.Fakes.ShimDateTime.NowGet = _
                    Function() As DateTime
                        Return New DateTime(fixedYear, 1, 1)
                    End Function
    
                ' Instantiate the component under test:
                Dim componentUnderTest = New MyComponent()
                ' Act:
                Dim year As Integer = componentUnderTest.GetTheCurrentYear
                ' Assert:
                ' This will always be true if the component is working:
                Assert.AreEqual(fixedYear, year)
            End Using
        End Sub
    End Class
    

    Nazwy klas podkładków składają się z prefiksu Fakes.Shim do oryginalnej nazwy typu.Shim class names are made up by prefixing Fakes.Shim to the original type name. Nazwy parametrów są dołączane do nazwy metody.Parameter names are appended to the method name. (Nie trzeba dodawać żadnego odwołania do zestawu do System. resztuczne).(You don't have to add any assembly reference to System.Fakes.)

W poprzednim przykładzie podkładka jest wykorzystana do metody statycznej.The previous example uses a shim for a static method. Aby użyć podkładki dla metody wystąpienia, napisz AllInstances między nazwą typu a nazwą metody:To use a shim for an instance method, write AllInstances between the type name and the method name:

System.IO.Fakes.ShimFile.AllInstances.ReadToEnd = ...

(Nie istnieje zestaw "System. IO. resztuczne" do odwołania.(There is no 'System.IO.Fakes' assembly to reference. Przestrzeń nazw jest generowana przez proces tworzenia podkładki.The namespace is generated by the shim creation process. Ale w zwykły sposób można użyć opcji "Using" lub "Import").But you can use 'using' or 'Import' in the usual way.)

Można również utworzyć podkładki dla konkretnych wystąpień, konstruktorów i właściwości.You can also create shims for specific instances, for constructors, and for properties. Aby uzyskać więcej informacji, zobacz Używanie podkładki do izolowania aplikacji od innych zestawów do testowania jednostkowego.For more information, see Use shims to isolate your application from other assemblies for unit testing.

Korzystanie z elementów sztucznych firmy Microsoft w CIUsing Microsoft Fakes in the CI

Generacja zestawu elementów sztucznych firmy MicrosoftMicrosoft Fakes Assembly Generation

Ponieważ fałszywe firmy Microsoft wymagają Visual Studio Enterprise, generacja zestawów elementów sztucznych wymaga skompilowania projektu za pomocą zadania kompilacji programu Visual Studio.Since Microsoft Fakes requires Visual Studio Enterprise, the generation of Fakes Assemblies requires that you build your project using Visual Studio Build Task.

Uwaga

Alternatywą dla tego jest sprawdzenie zestawów elementów sztucznych w CI i użycie zadania MSBuild.An alternative to this is to check your Fakes Assemblies into the CI and use the MSBuild Task. Gdy to zrobisz, musisz upewnić się, że masz odwołanie do zestawu dla wygenerowanego zestawu elementów sztucznych w projekcie testowym, podobnie jak w poniższym fragmencie kodu:When you do this, you need to ensure that you have an assembly reference to the generated Fakes assembly in your test project, similar to the following code snippet :

<Project Sdk="Microsoft.NET.Sdk">
    <ItemGroup>
        <Reference Include="FakesAssemblies\System.Fakes.dll">
    </ItemGroup>
</Project>

To odwołanie jest wymagane do dodania w ręcznie określonych projektach w stylu zestawu SDK (.NET Core i .NET Framework), ponieważ zostały przeniesione do niejawnie dodawane odwołań do zestawu do projektu testowego.This reference is required to be added in manually specifically SDK-style projects (.NET Core and .NET Framework) because we have moved to implicitly adding assembly references to your test project. Jeśli korzystasz z tej metody, musisz się upewnić, że zestaw elementów sztucznych zostanie zaktualizowany po zmianie zestawu nadrzędnego.If you follow this method, you need to ensure that the fakes assembly is updated when the parent assembly changes.

Uruchamianie testów sztucznych firmy MicrosoftRunning Microsoft Fakes tests

Tak długo, jak zestawy sztuczne firmy Microsoft znajdują się w skonfigurowanym FakesAssemblies katalogu (ustawienie domyślne $(ProjectDir)FakesAssemblies ), można uruchomić testy przy użyciu zadania VSTest.As long as Microsoft Fakes assemblies are present in the configured FakesAssemblies directory (The default being $(ProjectDir)FakesAssemblies), you can run tests using the vstest task.

Testowanie rozproszone z projektami VSTest zadania .NET Core przy użyciu elementów sztucznych firmy Microsoft wymaga programu Visual Studio 2019 Update 9 (wersja zapoznawcza) 20201020-06 lub nowszego.Distributed testing with the vstest task .NET Core projects using Microsoft Fakes requires Visual Studio 2019 Update 9 Preview 20201020-06 and higher.

Przechodzenie do .NET Framework projektów testowych, które korzystają z elementów sztucznych firmy Microsoft do .NET Framework w stylu zestawu SDK programu .NET CoreTransitioning your .NET Framework test projects that use Microsoft Fakes to SDK-style .NET Framework or .NET Core projects

Konieczne będzie wprowadzenie minimalnych zmian w .NET Framework skonfigurowanych dla elementów sztucznych firmy Microsoft do przejścia na platformę .NET Core.You will need minimal changes in your .NET Framework set up for Microsoft Fakes to transition to .NET Core. Należy wziąć pod uwagę następujące przypadki:The cases that you would have to consider are:

  • Jeśli używasz niestandardowego szablonu projektu, musisz upewnić się, że jest to zestaw SDK i kompilacja dla zgodnej platformy docelowej.If you are using a custom project template, you need to ensure that it is SDK-style and builds for a compatible target framework.
  • Niektóre typy istnieją w różnych zestawach w .NET Framework i .NET Core (na przykład System.DateTime istnieje w System / mscorlib .NET Framework, i w System.Runtime programie .NET Core), a w tych scenariuszach należy zmienić sposób, w jaki ma zostać zmieniony.Certain types exist in different assemblies in .NET Framework and .NET Core (for example, System.DateTime exists in System/mscorlib in .NET Framework, and in System.Runtime in .NET Core), and in these scenarios you need to change the assembly being faked.
  • Jeśli masz odwołanie do zestawu elementów sztucznych i projektu testowego, może zostać wyświetlone ostrzeżenie kompilacji dotyczące brakujących odwołań podobne do:If you have an assembly reference to a fakes assembly and the test project, you might see a build warning about a missing reference similar to:
    (ResolveAssemblyReferences target) ->
    warning MSB3245: Could not resolve this reference. Could not locate the assembly "AssemblyName.Fakes". Check to make sure the assembly exists on disk.
    If this reference is required by your code, you may get compilation errors.
    
    To ostrzeżenie jest spowodowane niezbędnymi zmianami w generowaniu elementów sztucznych, które można zignorować.This warning is due to necessary changes made in Fakes generation can be ignored. Można to uniknąć, usuwając odwołanie do zestawu z pliku projektu, ponieważ teraz niejawnie dodamy je podczas kompilacji.It can be avoided by removing the assembly reference from the project file, because we now implicitly add them during the build.

Wsparcie dla sztucznych firmy MicrosoftMicrosoft Fakes support

Firmy Microsoft w starszych projektach mają do .NET Framework (styl inny niż zestaw SDK).Microsoft Fakes in older projects targeting .NET Framework (non-SDK style).

  • Generacja zestawu elementów sztucznych firmy Microsoft jest obsługiwana w Visual Studio Enterprise 2015 i nowszych.Microsoft Fakes assembly generation is supported in Visual Studio Enterprise 2015 and higher.
  • Testy sztuczne firmy Microsoft mogą działać ze wszystkimi dostępnymi pakietami NuGet Microsoft. TestPlatform.Microsoft Fakes tests can run with all available Microsoft.TestPlatform NuGet packages.
  • Pokrycie kodu jest obsługiwane dla projektów testowych korzystających z elementów sztucznych firmy Microsoft w Visual Studio Enterprise 2015 i wyższych.Code coverage is supported for test projects using Microsoft Fakes in Visual Studio Enterprise 2015 and higher.

Sztuczne firmy Microsoft w .NET Framework w stylu zestawu SDK i projekty .NET CoreMicrosoft Fakes in SDK-style .NET Framework and .NET Core projects

  • Firma Microsoft sztuczna generacja zestawu, która jest wyświetlana w Visual Studio Enterprise 2019 Update 6 i jest domyślnie włączona w wersji Update 8.Microsoft Fakes assembly generation previewed in Visual Studio Enterprise 2019 Update 6 and is enabled by default in Update 8.
  • Testy sztuczne firmy Microsoft dla projektów, które są przeznaczone .NET Framework mogą działać ze wszystkimi dostępnymi pakietami NuGet Microsoft. TestPlatform.Microsoft Fakes tests for projects that target .NET Framework can run with all available Microsoft.TestPlatform NuGet packages.
  • Testy sztuczne firmy Microsoft dla projektów przeznaczonych dla platformy .NET Core mogą działać z pakietami NuGet Microsoft. TestPlatform z wersjami 16.8.0-Preview-20200921-01 i nowszymi.Microsoft Fakes tests for projects that target .NET Core can run with Microsoft.TestPlatform NuGet packages with versions 16.8.0-preview-20200921-01 and higher.
  • Pokrycie kodu jest obsługiwane dla projektów testowych przeznaczonych dla .NET Framework przy użyciu elementów sztucznych firmy Microsoft w Visual Studio Enterprise w wersji 2015 lub nowszej.Code coverage is supported for test projects targeting .NET Framework using Microsoft Fakes in Visual Studio Enterprise version 2015 and higher.
  • Obsługa pokrycia kodu dla projektów testowych przeznaczonych dla platformy .NET Core przy użyciu elementów sztucznych firmy Microsoft jest w fazie projektowania.Code coverage support for test projects targeting .NET Core using Microsoft Fakes is under development.

W tej sekcjiIn this section

Stosowanie wycinków kodu do izolowania od siebie poszczególnych części aplikacji w celu przeprowadzania testów jednostkowychUse stubs to isolate parts of your application from each other for unit testing

Stosowanie podkładek do izolowania aplikacji od innych zestawów w celu przeprowadzania testów jednostkowychUse shims to isolate your application from other assemblies for unit testing

Konwencje dotyczące generowania kodu, jego kompilowania i nazywania w Microsoft FakesCode generation, compilation, and naming conventions in Microsoft Fakes