diffplug / diffplug/selfie

toMatchDisk_TODO throws error when writing multiple snapshots to disk during parameterized tests, succeeds on follow ups.

Offen
#370 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen
bug jvm
Vorherrschende Sprache
Kotlin
Sterne
101
Forks
18
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I am using `selfie-runner-junit5:2.0.1` to verify errors for each test case. I my parameters include a unique test case name to pass into `toMatchDisk`.

The summarized version:

```kotlin
@ParameterizedTest(name = "rejects invalid commands: {1}")
@MethodSource("modifyNodeItemsValidationCases")
fun `rejects invalid commands`(
cmd: Command,
testcaseName: String,
) = runTest {
val thrown = shouldThrow {
validate(cmd)
}
thrown.response.respCase shouldBe RespCase.RESPONSE_BAD_REQUEST
Selfie.expectSelfie(thrown.message.toString()).toMatchDisk(testcaseName)
}
```

When I run this test case, the snapshot file is successfully written:

```
╔═ rejects invalid commands/Child node not found ═╗
ModifyItem must have a valid item case to modify
╔═ rejects invalid commands/Empty modify item ═╗
ModifyItem must have a valid item case to modify
╔═ rejects invalid commands/Empty modify node item ═╗
ModifyNodeItemWithAddition must have either modifyItem, updateExistingTraits, modifyChildElectricalConnectionPoints, or upstreamElectricalConnectionPoint
╔═ rejects invalid commands/No UtilityMeterNode when trying to edit a utility meter node ═╗
No UtilityMeterNode item found for node id 1 in topology
╔═ rejects invalid commands/Node not found ═╗
Provided node id 1 not in topology
╔═ rejects invalid commands/empty modifyDownstreamElectricalConnectionPoint ═╗
ModifyItem must have a valid item case to modify
╔═ rejects invalid commands/empty simpleElectricalConnectionPoint ═╗
ModifyItem must have a valid item case to modify
╔═ [end of file] ═╗

```

But the first run fails with this error:

```
org.opentest4j.AssertionFailedError: Snapshot was set to multiple values!
first time: ValidatorTest$rejects invalid commands$1.invokeSuspend(Validator.kt:613)
this time: ValidatorTest$rejects invalid commands$1.invokeSuspend(Validator.kt:613)
```

Once the file is created things seem to work:

- Subsequent test runs pass
- If I modify one or more of the expected value and include `//selfieonce` the updates are made and tests pass
- Add one or more new test case with `//selfieonce`

I can produce the same errors again if the file exists if I ever reuse the `_TODO`.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit dem parametrisierten Kotlin-Reproducer unter Verwendung von selfie-runner-junit5:2.0.1 und untersuche den Fehler bei Validator.kt:613. Vergleiche den ersten Lauf, bei dem die Snapshot-Datei erstellt wird, mit späteren Läufen und mit der Wiederverwendung eines vorhandenen _TODO; abgeschlossen ist die Aufgabe, wenn mehrere Snapshots geschrieben werden können, ohne dass der Fehler „Snapshot was set to multiple values!“ auftritt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
kotlin
Bereich
testing
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.