Ich habe Probleme zu kontrollieren, was mit den Variablen innerhalb der Methoden, die ich testen möchte, los ist. In diesem Beispiel ist die Eingabe für die zu testende Methode ein verspottetes oder injizierbares Objekt. Wenn Sie jedoch versuchen, etwas damit zu tun, erhalten Sie Null * -Ausnahmen.Jmockit: Unfähig, inneres Feld zu verspotten. Immer endet als Null
Klasse und Methode getestet:
public class SomeClass {
public SomeClass() {}
public void myMethod(InputClass input) {
//how do I set this field so that no matter what, I don't get an exeption?
long someLong = Long.parseLong(input.getSomeLong());
// how do I prevent the NumberFormatException when Long.parseLong() is called in this situation?
SomeInnerClass innerClass = SomeInnerClass(Long.parseLong(input.getSomeLong()));
// how do I prevent the NumberFormatException when Long.parseLong() is called in this situation?
innerClass.doStuff(Long.parseLong(input.getSomeLong()));
// ...
}
}
Testklasse:
public class TestSomeClass {
@Tested private SomeClass classBeingTested;
@Injectable SomeInnerClass innerClass;
@Injectable InputClass input; // doesn't matter if I use @mocked here
@Test
public void shouldTestSomething() {
new NonStrictExpectations() {{
// some expectations with innerClass...
}};
classBeingTested.myMethod(input); // at this point I would get an error from Long.parsLong()
// ...
}
}
Ich möchte in der Lage sein, Fehler in bestimmten Teilen des Codes zu ignorieren innerhalb der Methode, die ich bin testen. Der Long.parseLong() Fehler in diesem speziellen Fall interessiert mich überhaupt nicht. Ich versuche das derzeit nicht zu testen, aber es steht dem echten Test im Weg. Wie erstellt man ein falsches Objekt anstelle des Objekts, das Probleme verursacht, so dass es ignoriert werden kann, während ich einen anderen Teil der Methode teste?
würde ich so etwas wie Mockito verwenden. Dann können Sie den Test sagen, wenn xyz.myMethohd() Return abc Ergebnisse aufgerufen wird. Auf diese Weise steuern Sie genau, was der Code testet. – Dale
@Dale Das gleiche mit JMockit. Das Problem scheint hier zu sein, dass das OP mit Spott im Allgemeinen nicht vertraut ist. –