Czy jest możliwe uzyskanie dostępu do pola prywatnego podczas testu jednostkowego?Testowanie pola prywatnego przy użyciu MSTest
Odpowiedz
Sposób, aby uzyskać prywatnych pól lub metod w ogóle jest użycie refleksji. Jednak struktura testów jednostkowych obejmuje klasę pomocniczą, PrivateObject
, aby było to łatwiejsze. Zobacz docs. Na ogół, gdy użyłem tego, ja skończyło się dokonanie rozszerzenia metody tak:
public static int GetPrivateField(this MyObject obj)
{
PrivateObject po = new PrivateObject(obj);
return (int)po.GetField("_privateIntField");
}
Jeśli trzeba uzyskać pól prywatnych w klasie statycznej, jednak trzeba będzie przejść z prosto w górę odbicie.
Nie. Jeśli piszesz dobre testy jednostek, nie musisz mieć dostępu do żadnych pól prywatnych. Testy jednostkowe powinny sprawdzić, czy po przekazaniu w znanym zestawie wartości metoda zachowuje się w określony sposób (przez zwrócenie odpowiednich danych lub użycie zależności w znany sposób).
Jeśli próbujesz przetestować później, użyj Dependency Injection, aby wprowadzić zależności do badanej klasy. Będziesz mieć pełny dostęp do tych zależności w swoich testach.
Dziękuję wam, nie zdawałem sobie sprawy, że naruszam zasady TDD. Dziękujemy – Michelle
Pytanie brzmiało, czy to było możliwe, nie, czy jest to najlepsza praktyka. – stuartd
Chociaż zgadzam się z Justinem w teorii, w praktyce często trzeba pisać testy jednostkowe dla kodu suboptymalnego, którego nie można zmienić lub nie można go łatwo zmienić. – Dave
Nie mówię, że to dobry pomysł, ale widziałem InternalsVisibleTo używane.
Spójrz na to Q. jeden z bardziej niepopularne odpowiedzi:
- 1. Jak przeprowadzić testowanie atrybutów za pomocą MsTest przy użyciu C#?
- 2. Ustaw wartość pola prywatnego
- 3. Utwórz CSR przy użyciu istniejącego klucza prywatnego
- 4. Testowanie przy użyciu FragmentActivity Junit
- 5. Testowanie naprężeń przy użyciu ogórka
- 6. Testowanie jednostki Pytanie setera prywatnego (C#)
- 7. Jak można przetestować kod asynchroniczny przy użyciu MSTest
- 8. Testowanie alertów javascript przy użyciu Capybara
- 9. Testowanie prostej usługi AngularJS przy użyciu Jasmine
- 10. Testowanie sprężynowego @RequestBody przy użyciu Spring MockMVC
- 11. Testowanie golang przy użyciu plików lokalnych
- 12. Testowanie przy użyciu aliasów Jest i Webpack
- 13. Wdrażanie witryny z prywatnego repozytorium Github przy użyciu szablonów ARM
- 14. Przesyłanie do gita TFS przy użyciu klucza publicznego/prywatnego
- 15. C# - Zapisywanie dziennika przy użyciu pola tekstowego
- 16. zwiększyć/zmniejszyć wartość pola przy użyciu jQuery
- 17. Zmiana pola wyliczeniowego przy użyciu Alembic
- 18. Optymalizacja zapytań przy użyciu pola JSON
- 19. MSTest: testowanie urządzenia - plik wejściowy nie znaleziony ... vsmdi
- 20. Wybór następnego pola przy naciśnięciu enter przy użyciu jquery
- 21. VS2010 Testowanie obciążenia sieci przy użyciu loginu użytkownika
- 22. Testowanie urządzenia w systemie Android przy użyciu ActivityUnitTestCase i PreferenceManager
- 23. Unit Testowanie Web API przy użyciu HttpServer lub HttpSelfHostServer
- 24. Testowanie w Silex (pozorowane zamknięcia) przy użyciu PHPUnit
- 25. Utwórz testowanie apk systemu Android przy użyciu systemu gradle build
- 26. Testowanie aplikacji flash w Internecie przy użyciu selenu
- 27. Testowanie, czy zdalna kolejka wiadomości istnieje (przy użyciu C#).
- 28. Testowanie pustych metod przy użyciu OCMock w iOS
- 29. Dlaczego testowanie urządzenia przy użyciu Spring 3.1 WebMvcConfig nie działa?
- 30. Testowanie wydajności projektu Java w środowisku Eclipse przy użyciu VisualJVM
Dziękuję @mike Próbowałem go i działa dobrze. – Michelle
@Michelle Nie ma za co. –
Można uzyskać i ustawić prywatne pola w klasie statycznej za pomocą obiektu ['PrivateType'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype.aspx) (w przeciwieństwie do typu PrivateObject!) – stuartd