Im Beispiel unten gibt FakeItEasy 0
zurück, obwohl das IThing
Element GetValue()
nicht definiert wurde. Meine Frage ist; Warum wird ein Wert von 0
von einem nicht definierten Mitgliedsaufruf zurückgegeben und keine Ausnahme ausgelöst; Gibt es ein allgemeines Mocking/Fake/Stubbing-Framework-Softwaremuster, das vorschreibt, dass das Auslösen von Ausnahmen zum Aufrufen undefinierter Mitglieder ein No-No ist?Was ist der Grund dafür, dass Frameworks keine Ausnahmen auslösen?
public interface IThing
{
int GetValue();
}
public class Thing: IThing
{
public int GetValue()
{
return 1000;
}
}
[TestMethod]
public void Test1()
{
var thing= A.Fake<IThing>();
// A.CallTo(() => thing.GetValue()).Returns(1);
var val = thing.GetValue(); // Not defined but returns 0 rather than throwing an exeption
Assert.AreEqual(1, val);
}
Sie Ihre Fälschung in der Zeile 'var Sache = A.Fake() definiert;' Dies schafft eine gefälschte IThing Objekt (ein gefälschtes Objekt, das ist ein IThing, kein Thing-Objekt). 0 ist nur der Standardwert eines int (da Sie nichts anderes angegeben haben). Ich bin mir über Ausnahmeverhalten im Allgemeinen nicht sicher, aber es wird in diesem Fall nicht werfen, weil alles gültig ist. –
Tone
@Tone Das ist nicht was ich verlange. Eine Laufzeitausnahme ist das erwartete Verhalten beim Aufruf von undefined Member in der .NET Runtime, da es stark typisiert ist, und meine Frage ist, warum Mocking-Frameworks eine losere Semantik haben. –