Also habe ich diese Methode, die zufällig ein Objekt aus einer Liste von 2 Objekten auswählt. Ich möchte einen Junit-Test schreiben (@Test
), der basierend auf einem Konfidenzniveau behauptet, dass es irgendwie eine 50% ige Chance für jedes der 2 Objekte gibt, die ausgewählt werden sollen.Konfidenzintervalle in Java, Testen der zufälligen Auswahl eines Elements in einer Liste von Objekten
Das Stück des im Test befindlichen Code:
public MySepecialObj pickTheValue(List<MySepecialObj> objs, Random shufflingFactor) {
// this could probably be done in a more efficient way
// but my point is asserting on the 50% chance of the
// two objects inside the input list
Collections.shuffle(objs, shufflingFactor);
return objs.get(0);
}
Im Test würde I 2 mocks bieten mag (firstMySepecialObjMock
und secondMySepecialObjMock
) als Eingang Objekte vom Typ MySepecialObj
und new Random()
als Eingangsparameter Shuffling behauptet dann, dass Die firstMySepecialObjMock
ist zufällig die Wahl 50% der Zeiten und secondMySepecialObjMock
ist zufällig die Wahl in den anderen 50% der Zeiten.
Etwas wie:
@Test
public void myTestShouldCheckTheConfidenceInterval() {
// using Mockito here
MySepecialObj firstMySepecialObjMock = mock(MySepecialObj.class);
MySepecialObj secondMySepecialObjMock = mock(MySepecialObj.class);
// using some helpers from Guava to build the input list
List<MySepecialObj> theListOfTwoElements = Lists.newArrayList(firstMySepecialObjMock, secondMySepecialObjMock);
// call the method (multiple times? how many?) like:
MySepecialObj chosenValue = pickTheValue(theListOfTwoElements, new Random());
// assert somehow on all the choices using a confidence level
// verifying that firstMySepecialObjMock was picked ~50% of the times
// and secondMySepecialObjMock was picked the other ~50% of the times
}
ich über die Statistik Theorie hier nicht sicher bin, vielleicht sollte ich eine andere Instanz von Random
mit unterschiedlichen Parametern an den Konstruktor zur Verfügung stellen?
Ich würde auch gerne einen Test haben, wo ich das Konfidenzniveau als Parameter einstellen könnte (ich denke, normalerweise ist 95%, aber es könnte ein anderer Wert sein?).
- Was könnte eine reine Java-Lösung/Testkonfiguration mit einem Konfidenzniveau-Parameter sein?
- Was könnte eine äquivalente Lösung/Setup des Tests mit einigen Hilfs-Bibliothek wie die Apache Commons sein?