Laden...

NUnit merkwürdiges Verhalten bei Multithreading: "Expected: true but was: true"

Erstellt von inflames2k vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.550 Views
inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 13 Jahren
NUnit merkwürdiges Verhalten bei Multithreading: "Expected: true but was: true"

Hallo zusammen,

ich teste gerade eine Klasse auf Thread Sicherheit. Dazu habe ich eine Menge Threads, die Daten an die Klasse übergeben, welche innerhald der Klasse durch Enqueue einer Auflistung hinzugefügt werden.

Die Daten in der Queue werden in einem Thread innerhalb der Klasse in ein Dictionary platziert. - Desweiteren habe ich ein paar Threads die von außerhalb Daten aus der Klasse abrufen.

So viel ersteinmal zum Aufbau.

Im Thread, wo ich Daten abrufe, behaupte ich es sind Daten vorhanden. - Jedoch wird mir dort mindestens einmal eine Assertion Exception geworfen.

Diese mutet mir jedoch seltsam an:

Expected: true
but was: true

Wie ist das Verhalten zu erklären? Ich mein, es ist ja gewiss kein Fehlerfall wenn ich mit meiner Behauptung recht habe, was mir NUnit ja gar noch bestätigt.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

5.742 Beiträge seit 2007
vor 13 Jahren

Hallo inflames2k,

setzte mal einen Brakepoint.

Welche Assertionmethode verwendest du? Nicht zufällig Assert.IsSame?

1.130 Beiträge seit 2007
vor 13 Jahren

Das folgende lustige kleine snippet gibt aus:
"True does not equal True"

		byte[] bytes=new byte[2]{1,2};
		bool[] bools=new bool[bytes.Length];
		Buffer.BlockCopy(bytes,0,bools,0,bools.Length);
		if(bools[0]!=bools[1])
			Console.WriteLine(bools[0]+" does not equal " + bools[1]);

Vielleicht ist das je eine erklärung.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 13 Jahren

Nein 😉

Ich nutze "Assert.That(collectionx.Count > 0);"

also vorzustellen so:


private void ThreadMethod()
{
     List<Foo> foos = new List<Foo>();
     foos.AddRange(MyExpectedThreadSaveObject.GetFoos());

     Assert.That(foos.Count > 0); 
}

Wie gesagt erhalte ich hier zum Teil die Meldung "Expected: true but was: true". - Ist es richtiger Weise ein Fehler, erhalte ich auch false.

Die Collection hat beim Assert auch laut Debugger mehr als 0 Einträge. 🤔 Daher finde ich die ganze angelegenheit ja merkwürdig.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

welche Version von NUnit verwendest du? In letzter Zeit gab das einige Bugfixes (aktuell 2.5.7). Vielleicht tritt bei dir ein Bug in NUnit auf - ist ja nicht ausgeschlossen 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 13 Jahren

Daran könnte es durchaus liegen. Werd mal das Update machen und dann weiter sehen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

nur als Hinweis für das Update: Die aktualisierten Assemblies von nunit.framework.dll liegen in einem andern Verzeichnis - auf dieses aufpassen beim Einbinden des Verweises.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"