Angenommen, ich zwei Objekte mit folgenden Struktur:Vergleich Objekte mit Datetime-Eigenschaften in PHPUnit
class Item {
public $id;
public $date;
}
In einem Gerät zu testen, würde Ich mag die Gleichheit der beiden Elemente testen. Z.B .:
class MyTests extends PHPUnit\Framework\TestCase
{
public function testDummy() {
$item1 = new Item();
$item1->id = 1000;
$item1->date = new DateTimeImmutable('now');
$item2 = new Item();
$item2->id = 1000;
$item2->date = $item1->date->modify('+1 second');
// For my use case, I'd consider these two items equal.
$this::assertEquals($item1, $item2); // FAILURE :(
}
Gibt es eine saubere/einfache Art und Weise, diese Objekte zu vergleichen, und ein Delta im Fall verwenden PHPUnit ein DateTime
Objekt trifft?
Ich weiß, ich kann $this::assertEquals($item1->date, $item2->date, '', 10)
verwenden, aber mit meinem Objekt würde ich lieber keine Aussagen für jede Eigenschaft schreiben.
Danke!
Wie sind die beiden Instanzen gleich? Die Eigenschaft "Datum" liegt eine Sekunde auseinander. Was bedeutet "gleich" für Ihren Anwendungsfall? – ishegg
Warum fügst du eine Sekunde hinzu und denkst sogar, dass es gleich ist? In DateTime gibt es Millisekunden. – DanFromGermany
Der Fall, den Sie als Beispiel verwenden, ist nicht einmal sinnvoll, natürlich sind die Inhalte von zwei Objekten gleich, wenn Sie sie gleich setzen. Wenn du mehr Komfort willst, dann schaue ich mir 'Reflection' an. – DanFromGermany