Angenommen, ich habe eine Methode, die einige Argumente benötigt und sie als Instanzvariablen speichert. Wenn einer von ihnen null ist, wird später ein Code abstürzen. Würden Sie die Methode ändern, um eine Ausnahme auszulösen, wenn Nullargumente bereitgestellt werden, und Unit-Tests hinzufügen, um dies zu überprüfen oder nicht? Wenn ich das tue, ist es etwas komplizierter, da Javascript viele schlechte Werte hat (null, undefined, NaN, usw.) und da es dynamische Typisierung hat, kann ich nicht einmal überprüfen, ob die richtige Art von Objekt übergeben wurde.Wie wichtig ist es, beim Testen von Einheiten nach schlechten Parametern zu suchen?
Antwort
Ich denke, es hängt wirklich davon ab, welche API Sie testen. Wenn es sich um eine Komponente handelt, die nur für den internen Gebrauch entworfen und gebaut wurde und Sie wissen, dass die Verwendung bestimmten Einschränkungen unterliegt, kann es zu einem Overkill für den Komponententest für fehlerhafte Parameter kommen. Auf der anderen Seite, wenn Sie über etwas sprechen, das extern verteilt werden soll, oder das in einer Vielzahl von Situationen verwendet wird, von denen einige schwer vorherzusagen sind, dann ist das Überprüfen auf schlechte Parameter angemessen. Es hängt alles von der Nutzung ab.
Ich denke, Sie haben wirklich 2 verschiedene Fragen hier.
Die erste ist, was ist die beste Praxis für die Validierung der Parametereingabe und die zweite ist, sollte Ihr Gerät Test Test für diese Situationen zu behandeln.
Ich würde empfehlen, dass Sie entweder eine Argumentausnahme für den Parameter werfen, der nicht korrekt an Ihre Funktion geliefert wurde, oder eine andere Variable/Nachricht, die die aufrufende Funktion/den Benutzer über die Situation informiert. Normalerweise möchten Sie keine Ausnahmen auslösen und sollten verhindern, dass die Funktionen überhaupt aufgerufen werden, wenn Sie wissen, dass sie fehlschlagen.
Für Ihren Komponententest sollten Sie unbedingt NULL-Wert-Tests einschließen, um sicherzustellen, dass ein gefälliges Ergebnis auftritt.
JavaScript hat Instanceof und typeof, die helfen können Sie überprüfen, welche Art von Objekten auf Ihre Funktionen übergeben werden:
'undefined' == typeof noVariable; // true
var noVariable = null;
'undefined' == typeof noVariable; // false
typeof noVariable; // 'object'
noVariable === null; // true
var myArray = [];
typeof myArray; // 'object'
myArray instanceof Object; // true
myArray instanceof Array; // true
var myObject = {};
typeof myObject; // 'object'
myObject instanceof Object; // true
myObject instanceof Array; // false
Sie können diese verwenden, um einige default „schlechten“ Werte zu setzen für Ihre Instanzvariablen:
function myFunction(foo,bar) {
foo = foo instanceof Array ? foo : []; // If 'foo' is not an array, make it an empty one
bar = bar instanceof Number ? bar : 0;
// This loop should always exit without error, although it may never do a single iteration
for (var i=0; i<foo.length; i++) {
console.log(foo[i]);
}
// Should never fail
bar++;
}
Der oder Betreiber auch sehr nützlich ist:
function myFunction(blat) {
var blat = blat||null; // If 'blat' is 0, '', undefined, NaN, or null, force it to be null
// You can be sure that 'blat' will be at least *some* kind of object inside this block
if (null!==blat) {
}
}
foo wird gleich wahr, wenn es ein Array ist? –
Whoopsie. Ja, das 'foo/bar'-Beispiel ist geburkst. Für diejenigen, die dies als Antwort betrachten, ersetzen Sie die Operatoren ** oder ** '||' durch einen ternären Ausdruck: '(foo instanceof Array)? foo: [] '. – shuckster
Vergessen Sie auch nicht, dass Sie mit JavaScript weniger als oder mehr als die erwartete Anzahl von Parametern übergeben können. Sie können das auch überprüfen, wenn Sie möchten.
Für die Erstellung von robusten und sicheren Code ist die Überprüfung der Edge Cases definitiv eine wichtige Aufgabe. Positive und negative Tests sind immer gut für die Qualität. Das Fehlen von negativen Tests könnte Sie auf lange Sicht beißen.
Also würde ich sagen, es ist besser, auf Nummer sicher zu gehen - beides. Es ist ein bisschen mehr Arbeit, aber wenn Sie sich die Zeit leisten können, dann wird es sich lohnen. Es kann manchmal sehr interessant sein, den Entwicklerhut abzulegen und den Cracker-Hut anzuziehen.
- 1. Testen von Webservice-Einheiten
- 2. Testen von Multithread-Einheiten
- 3. MIPS - Ist es wichtig?
- 4. Wie wichtig ist es, alte Browser zu unterstützen?
- 5. Testen von Einheiten Ausnahmen mit PHPUnit?
- 6. Ist es wichtig, <label> in HTML zu verwenden?
- 7. Testen von nativen Einheiten von Visual Studio: Debug/Konsolenausgabe?
- 8. Wie wichtig ist es für C# -Entwickler, IIS zu kennen?
- 9. Wie wichtig ist es, OAuths Zugriffstoken geheim zu halten?
- 10. Ist es unmöglich, nach leeren Terminen auf OnClick zu suchen?
- 11. F # generische Einheiten in zueinander definierten Parametern
- 12. Datenbanken: Spaltencodierung, wann ist es wichtig?
- 13. Was ist Assoziativität von Operatoren und warum ist es wichtig?
- 14. Ist es wichtig, Eigenschaften explizit in PHP zu deklarieren?
- 15. Ist es wichtig, den Namespace mit QT_BEGIN_NAMESPACE zu deklarieren. QT_END_NAMESPACE
- 16. Kann ASP.NET Identity FinderUser nach anderen Parametern suchen
- 17. Suchen nach Best Practices zum Testen gespeicherter Prozeduren?
- 18. Ist es wichtig, AutoCloseable in Java hinzuzufügen?
- 19. Konvertieren von Einheiten in Boost-Einheiten von angular_velocity zu grade_per_second
- 20. Ist Dims Position wichtig?
- 21. Wie wichtig ist SQL-Portabilität?
- 22. Wie formuliere ich eine SQL-Abfrage mit DATE_SUB, um nach Daten von gestern zu suchen ODER, wenn es Montag ist, um nach Daten von Freitag zu suchen?
- 23. Warum ist es unmöglich, diese Art von Parametern variabler Größe nach Wert zu übergeben?
- 24. bugzilla, wie nach Gruppe zu suchen
- 25. Fehler beim Suchen nach Datum aus Datenbankdaten
- 26. Wie wichtig ist es, eine Variable für DateTime.Today zu verwenden, wenn es um die Leistung geht? ersten
- 27. Testen von Visual Studio-Einheiten - Zugriff auf externe Dateien
- 28. Generierte RSPECT-Test fehlschlägt beim Testen POST mit ungültigen Parametern
- 29. Zabbix meldet nach 2 schlechten Werten
- 30. Wie kann ich Einheiten testen, die VisualTreeHelper verwenden?
Ich stimme dem zu. Parametertests sollten in den Funktionen/Methoden * selbst durchgeführt werden * wo immer geeignet (d. H. Fast die ganze Zeit). – Noldorin