Warum nehmen so viele assertEquals()
oder ähnliche Funktionen den erwarteten Wert als ersten Parameter und den tatsächlichen Wert als Sekunde?
Das scheint mir kontraproduktiv, gibt es also einen besonderen Grund für diese ungewöhnliche Reihenfolge?Warum sind assertEquals() Parameter in der Reihenfolge (erwartet, aktuell)?
Antwort
Weil die Autoren eine 50% ige Chance hatten, zu Ihrer Intuition zu passen.
Wegen der anderen Überlastung
assertWhatever(explanation, expected, actual)
Und die Erklärung, die von dem, was Sie wissen, geht mit der erwarteten, das ist, was Sie wissen, wie es zu dem eigentlichen Gegensatz, was Sie nicht tun wissen Sie, wann Sie den Code schreiben.
In diesem Fall wird es jedoch etwas inkonsistent, da in den meisten Sprachen die erforderlichen Parameter zuerst und die obligatorischen zuletzt angezeigt werden. Deshalb würde ich natürlich gehen für assertWhatever (tatsächlich, erwartet [, Erklärung]) – jor
Sorry, ich meinte die _optional_ Einsen erscheinen zuletzt, nicht zwingend ... – jor
Genau, jor! Außerdem ist es in Conditionals häufiger üblich, if (s == "a") zu schreiben als if ("a" == s) (obwohl es umstritten ist, ob es umgekehrt besser wäre - in Bezug auf die Gemeinsamkeit der erste) man gewinnt aber). – benroth
Die xUnit-Testkonvention ist erwartet/aktuell. Für viele ist das die natürliche Ordnung, denn das haben sie gelernt.
Interessanterweise in einer Pause von der Konvention für ein xUnit-Framework geht qunit für tatsächlich/erwartet. Mindestens mit Javascript können Sie einfach eine neue Funktion erstellen, die den alten und weisen Sie die ursprüngliche Variable kapselt:
var qunitEquals = equals;
equals = function(expected, actual, message) {
qunitEquals(actual, expected, message);
};
ich mit dem Konsens darüber einig, dass die Konsistenz # 1, aber das Verhalten des Vergleichens Wörterbücher kann sein, hilfreicher Datenpunkt, wenn Sie diese Frage bewerten.
Wenn ich ein "+" auf einem Diff sehe, lese ich dies als "das Verfahren, das geprüft wird, fügte dieses hinzu." Auch hier gelten persönliche Vorlieben.
Hinweis: Ich habe alphabetische Schlüssel verwendet und das Wörterbuch länger gemacht, so dass sich nur ein mittlerer Schlüssel aus Gründen der Klarheit des Beispiels ändern würde. Andere Szenarien zeigen mehr verschleierte Diffs an. Ebenfalls bemerkenswert, assertEqual uses assertDictEqual in> = 2,7 und> = 3,1
exl.py
from unittest import TestCase
class DictionaryTest(TestCase):
def test_assert_order(self):
self.assertEqual(
{
'a_first_key': 'value',
'key_number_2': 'value',
'z_last_key': 'value',
'first_not_second': 'value',
},
{
'a_first_key': 'value',
'key_number_2': 'value',
'z_last_key': 'value',
'second_not_first': 'value',
}
)
Ausgang:
$ python -m unittest exl
F
======================================================================
FAIL: test_assert_order (exl.DictionaryTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "exl.py", line 18, in test_assert_order
'second_not_first': 'value',
AssertionError: {'a_first_key': 'value', 'z_last_key': 'value', 'key_number_2': 'value', 'first_ [truncated]... != {'a_first_key': 'value', 'z_last_key': 'value', 'key_number_2': 'value', 'second [truncated]...
{'a_first_key': 'value',
- 'first_not_second': 'value',
'key_number_2': 'value',
+ 'second_not_first': 'value',
'z_last_key': 'value'}
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
- 1. assertEquals funktioniert nicht ohne zweiten Parameter Casting
- 2. Assert.AreEqual (erwartet, aktuell) für mehrere erwartete Werte
- 3. Warum sind unbenannte Parameter nützlich?
- 4. Ändern der Reihenfolge der Parameter löst Linkerfehler
- 5. assertEquals Präzision
- 6. Fehlermeldungen sind nicht in der richtigen Reihenfolge
- 7. mysqli_real_escape_string() erwartet Parameter 1 in
- 8. assertEquals gegen assertEqual in python
- 9. assertEquals in JUnit-Test
- 10. Warum wird Int übergeben, wo ein F [_] Parameter erwartet wird?
- 11. Warum sind die Parameter der Ember-Route Unterstrich-Stil?
- 12. Warum 'constexpr' Parameter nicht erlaubt sind?
- 13. Warum sollte ich Membervariablen in der Reihenfolge initialisieren, in der sie deklariert sind?
- 14. Benutzerdefinierte Ausnahmebedingungsnachricht mit JUnit assertEquals?
- 15. Machen PostgreSQL die Reihenfolge der eingegebenen Parameter?
- 16. mysql_fetch_array() erwartet Parameter 1 Ressourcenproblem
- 17. assertEquals (String, String) ComparisonFailure wenn Inhalte identisch sind
- 18. String.Format Parameter Reihenfolge Ärger
- 19. Sind Array-Parameter in Schienen garantiert in der Reihenfolge, in der sie in der URL angezeigt werden?
- 20. Easymock: Ist die Reihenfolge der Eroberungen wichtig?
- 21. Sind Funktionen unabhängig von der Reihenfolge definiert?
- 22. Sind sbt-Bibliotheksabhängigkeiten von der Reihenfolge abhängig?
- 23. Überprüfen der richtigen Parameter sind in Phoenix
- 24. Die Reihenfolge der Parameter der Funktion für ocaml
- 25. Suche nach der Reihenfolge, in der die Kontrollkästchen aktiviert sind
- 26. Warum protokolliert der NLog nicht wie erwartet?
- 27. Warum zufällige Reihenfolge
- 28. Was sind Parameter in PHP?
- 29. Warum ist die Reihenfolge der SOAP-Parameter in PHP SOAP wichtig und wie kann man sie beheben?
- 30. assertTrue mit "instanceof" vs assertEquals
diesem Grund habe ich in der Regel mit Matcher am Ende, wie assertThat (tatsächliche, ist (erwartet)) Ich finde es so viel einfacher zu lesen – JonathanC
Sind Sie sicher, dass wirklich die Reihenfolge ist? Die Dokumente geben keinen Standard für 'assertEqual' selbst an https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertEqual und das Durchsuchen dieser Seite zeigt, dass die Reihenfolge innerhalb des Unittest-Moduls selbst inkonsistent ist . Aber dieses Python-Problem impliziert (tatsächlich, erwartet) ist in der Tat der Standard: http://bugs.python.org/issue10573 –
Beachten Sie auch, dass 'assertEquals' veraltet ist - verwenden Sie' assertEqual' (obwohl zumindest in 2.7, es zeigt nicht wirklich an, welcher Parameter erwartet wird und welcher tatsächlich ist) –