Jedną z niewielu rzeczy, na które zgadza się większość programistów, jest to, że nie powinieneś polegać na poprawnym działaniu kodu, chyba że go przetestujesz. Jeśli go nie przetestujesz, może mieć ukryte błędy, które tylko spowodują, że będziesz więcej pracować na drodze.
Rozumiem, jak przetestować mój normalny kod, ale jak powinienem przetestować kod testowy, aby upewnić się, że może skutecznie znajdować i zgłaszać błędy, gdy są one obecne? Ja osobiście byłem na tyle głupi, aby pisać błędne przypadki testowe, które zdałyby, gdy nie powinny, i w ten sposób podważyłem cel moich testów pisania. Na szczęście znalazłem i naprawiłem błędy na czas, ale zgodnie z mantrą testową wydaje się, że żaden zestaw testów nie byłby kompletny bez własnego zestawu testów, aby upewnić się, że działa.
Wydaje mi się, że najlepszym sposobem na to jest upewnienie się, że test się nie powiedzie. * Jeśli spędzę 2 minuty na przemian dodając błędy do kodu i upewniając się, że się nie powiedzie, powinienem mieć akceptowalny stopień pewności, że „praca” testów. To prowadzi mnie do drugiego pytania: Jakie są dobre sposoby na wprowadzenie błędów, aby upewnić się, że zostały one złapane przez przypadki testowe? Czy powinienem po prostu losowo komentować instrukcje, upewnić się, że if-else
uruchamia się niewłaściwa gałąź an , negując jej stan, i zmieniać kolejność wykonywania kodu z efektami ubocznymi itp., Aż będę zadowolony, że moje testy przechwycą najwięcejtypowe błędy? Jak profesjonalni programiści sprawdzają, czy ich testy faktycznie robią to, co powinni? Czy po prostu zakładają, że testy działają, czy też poświęcają czas na ich przetestowanie? Jeśli tak, to w jaki sposób testują testy?
Nie sugeruję, że ludzie powinni poświęcać tyle czasu na testowanie testów, a następnie testowanie testów pod kątem testów, że tak naprawdę nigdy nie piszą prawdziwego kodu, ale zrobiłem wystarczająco głupie rzeczy, z których, jak sądzę, mógłbym skorzystać „meta-testowania” i byłam ciekawa, jak to zrobić. :RE
* Mogę sprawdzić, czy test przeszedł pomyślnie podczas testowania kodu „bezbłędnego”, ale użycie tego kodu jako specyfikacji testu wydaje się dość wsteczne ...