Szybkie pytanie, używam ramy testowej Visual Studio do testowania jednostkowego. Zastanawiasz się, jaka jest różnica między używaniem konstruktora do wykonywania pracy inicjalizującej a używaniem metody z atrybutem [TestInitialize()]?Jaka jest różnica między używaniem konstruktora w ramach VS Testing a atrybutem TestInitialize()?
Odpowiedz
This post zawiera przegląd różnych metod. Jak widać, ctor jest wywoływany bezpośrednio przed ClassInitialize
(tylko raz, oczywiście) i TestInitialize
.
Połóż rzeczy wymagające kodu w ClassInitialize
w swojej metodzie TestInitialize
. Wszystko, co powinno zostać skonfigurowane przed ClassInitialize
idzie w ctor.
Zawartość, oczywiście, TestInitialize
zostanie wykonana przed każdym testem. Odpowiednią metodą zamykania po każdym teście jest TestCleanup
. Dla klas użyj ClassCleanup
. To samo dotyczy również zespołów (AssemblyInitialize/Cleanup
).
Twoje pierwsze dwa zdania są nieprawidłowe. Ctor jest wywoływany przed każdym testem (który otrzymuje własne wystąpienie). 'ClassInitialize' jest wywoływane (raz) przed jakimkolwiek ctor (a więc i jakimkolwiek testem) - dlatego musi być statyczne! –
Ten ans nie jest właściwy. @ OhadSchneider's ma rację –
@PingJin, jeśli się ze mną zgodzisz, mógłbyś odpowiedzieć na moją odpowiedź ... :) –
ctor
dla inicjowania obiektu.
TestInitialize
służy do inicjowania dowolnych obiektów lub danych potrzebnych do uruchomienia testu.
Ale biorąc pod uwagę, że obiekt, który budujesz, jest klasą testową, z pewnością jedyną rzeczą, którą zainicjowałbyś w tym konstruktorze, jest: obiekty lub dane potrzebne do uruchomienia testu ... – bacar
Aby wyjaśnić, TestInitialize działa przed każdym testem, więc jeśli zainicjujesz tutaj obiekty, zostaną one ponownie utworzone dla każdego testu. To jest dobra praktyka. W przeciwnym razie ten sam obiekt byłby dzielony we wszystkich testach w klasie, co jest dużym testem jednostkowym. –
Konceptualnie są one takie same, ponieważ MSTest tworzy nowe wystąpienie klasy testowej przed każdym wykonaniem testu. Jednak technicznie istnieje kilka różnic:
- Ctor jest wywoływany przed
TestInitialize
(nic dziwnego, ponieważ to druga metoda instancji). - Masz dostęp do
TestContext
wTestInitialize
. - Więcej scenariuszy dziedziczenia jest włączonych za pomocą
TestInitialize
: https://stackoverflow.com/a/8689398/67824. - Możesz przypisać
readonly
pola w ctor. Myślę, że to bardzo ważne: https://stackoverflow.com/a/45270180/67824.
- 1. Jaka jest różnica między metodą mro a atrybutem __mro__ klasy?
- 2. Jaka jest różnica między używaniem IEqualityComparer a korektą Equals/GethashCode?
- 3. Jaka jest różnica między używaniem aplikacji/csv a tekstem/csv?
- 4. Jaka jest różnica między używaniem obiektu instantiateViewControllerWithIdentifier a wykonywaniem identyfikatora?
- 5. Jaka jest różnica między używaniem puli wątków a normalnym wątkiem?
- 6. Jaka jest różnica między url vs urlRoot
- 7. TestInitialize vs ClassInitialize
- 8. Jaka jest różnica między wzorcem konstruktora a wzorem masy?
- 9. Różnica między "używaniem" a określaniem zakresu?
- 10. Jaka jest różnica między kulturą a UICulture?
- 11. Jaka jest różnica między używaniem Docker Machine a Swarm i używaniem Swarm przez demona Docker?
- 12. Jaka jest różnica między Row a RowLayout?
- 13. Jaka jest różnica między kopiowaniem a klonowaniem?
- 14. Jaka jest różnica między == a === w Verilog?
- 15. Różnica między używaniem UINavigationController a UINavigationBar
- 16. Jaka jest różnica między colorWithSRGBRed a colorWithDeviceRed vs colorWithCalibratedRed
- 17. XSD: różnica między elementem a atrybutem
- 18. jaka jest różnica między używaniem ATOMIC_FLAG_INIT i std :: atomic_flag :: wyraźny
- 19. Jaka jest różnica między $ a a $$ a w php?
- 20. Jaka jest różnica między używaniem MD5.Create i MD5CryptoServiceProvider?
- 21. Szablon Metaprogramming - Różnica między używaniem Enuma Hack a statycznym Const
- 22. webpack "--watch" vs "--hot": jaka jest różnica?
- 23. Jaka jest różnica między NSURLSessionDataTask vs NSURLSessionDownloadTask
- 24. Jaka jest różnica w Perlu podczas przekazywania zmiennej w wyrażeniu regularnym między używaniem zmiennej $ a $ {zmienna}
- 25. Jaka jest różnica między $ i $$?
- 26. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 27. Jaka jest różnica między pakietem a intencją?
- 28. Jaka jest różnica między krotką a kompresją?
- 29. Jaka jest różnica między uchwytem a wątkiem?
- 30. Jaka jest różnica między cancelBubble a stopPropagation?
możliwy duplikat [Czy używasz TestInitialize lub konstruktora klasy testowej do przygotowania każdego testu? i dlaczego?] (http://stackoverflow.com/questions/334515/do-you-use-testinitialize-lub-test-class-constructor-to-prepare-each-test-and) – mafu