Frage

Ich möchte Objektdaten verspotten, nicht die Objekte selbst. Mit anderen Worten, würde Ich mag eine Sammlung von n Objekten erzeugen und es in eine Funktion übergeben, die Strings und Zahlen Zufallsdatum erzeugt. Gibt es etwas, dies zu tun? Betrachten Sie es als Lorem Ipsum für Objektdaten. Constraints um Zahlenbereiche usw. sind nicht notwendig, aber wäre ein Bonus.

War es hilfreich?

Lösung

Das erste, was ich dachte, als ich Ihre Frage gelesen hat, war Quick Check, ein Test-Tool für Haskell. In Quick geben Sie Eigenschaften (Invarianten), dass Ihre Funktion haben sollte, und Sie können gültige Bereiche für Eingänge (plus ein paar mehr Funktionen) angeben, und Quick Check wird eine Reihe von zufälligen Eingangsdaten erzeugen und es an Ihrer Funktion werfen und überprüfen zu sehen wenn die Ausgabe entspricht der Spezifikation. Herumzuschnüffeln ein wenig fand ich heraus, gibt es einen F # Hafen es so Quick Check in der .net Welt existiert:

http://fscheck.codeplex.com/

Es gibt auch ein MS Forschungsprojekt Pex, die nahe sein könnte, was Sie denken an:

http://research.microsoft.com/en-us/projects/Pex /

„... findet Pex interessante Input-Output-Werte Ihre Methoden, die Sie als kleine Testsuite mit hohen Codeabdeckung speichern. Microsoft Pex ist ein Visual Studio Add-In für das Testen von Anwendungen .NET Framework.“

Ich habe es noch nie benutzt, aber es sah so ist es gut für die Erzeugung Randfalldaten, die jede und alle Zweige einer Funktion ausübt. Es analysiert tatsächlich eine Funktion und nicht nur an mich wirklich zufällig Sachen zu werfen.

Andere Tipps

Es scheint auch eine .NET-Port des Ruby-Faker Juwel zu sein, die für Rigging gefälschte Datenobjekte in Ruby eine Menge Einsatz kommt. Ich habe es nicht, aber es könnte sich lohnen, ein Blick in:

https://github.com/slashdotdash/faker-cs

Ich bin überrascht, dass niemand AutoFixture noch:

[TestMethod]
public void IntroductoryTest()
{
    // Fixture setup
    Fixture fixture = new Fixture();

    int expectedNumber = fixture.CreateAnonymous<int>();
    MyClass sut = fixture.CreateAnonymous<MyClass>();
    // Exercise system
    int result = sut.Echo(expectedNumber);
    // Verify outcome
    Assert.AreEqual<int>(expectedNumber, result, "Echo");
    // Teardown
}

Sie könnte Setup eine ObjectRandomizer Klasse, die ein Array von Objekten nimmt, verwendet Reflektion, um das Objekt für private Mitglieder zu prüfen und dann Reflexion verwenden, um einen Zufallswert für das Element zu setzen. Dies funktioniert nur, wenn Sie nicht wie pro Objekt, was die Zufallsdaten Aussehen egal.

Alternativ können Sie eine Reihe von Klassen für jedes Datenobjekt erstellen, die für sie Zufallsdaten erzeugt. Dies könnte gut funktionieren, wenn Sie nicht die Zufallserzeugungsverfahren innerhalb des eigentlichen Baugruppen gehören wollen. Zum Beispiel, wenn Sie eine Person Klasse haben, konnte man eine PersonRandomizer Klasse in einer Testanordnung hat. In Ihrer Testklasse (oder in einer Randomizer Klasse), könnten Sie dann mit Reflexion eine Art PersonRandomizer zu finden, und wenn es vorhanden ist, ruft PersonRandomizer.Randomize(Person p).

Wenn Sie mit yahya Vorschlag gehen, schlage ich vor, eine Schnittstelle IRandomizable für Objekte, die Unterstützung der Randomisierung Erstellen oder markiert sie mit einem neuen Attribut Randomizable, dass Sie zur Laufzeit erkennen kann.

Für meine Prüfung füge ich nur eine Methode, um alle Klassen zu erstellen ich, dass tut dies und nenne es randomisieren. Jede Klasse weiß, was die rechtlichen Daten für ein Objekt dieser Klasse aussehen sollten. Nach dem Erstellen rufen Sie das Objekt einfach seine randomize Methode es mit zufälligem Mock-up Daten zu füllen. Sie könnten auch Methoden spezialisiert add zufällige Datenfolgen oder Zahlen auf Einschränkungen und diese spezialisierten Methoden generieren können in allen Klassen geteilt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top