EasyMock: Mock aus einem Konstruktor-Aufruf in java
Ich habe einen angeschaut, ähnliche Fragen auf diesem board, aber keiner von Ihnen Antwort auf meine Frage. Diese seltsam klingen, aber ist es möglich, zu verhöhnen, aus einem Konstruktor-Aufruf auf das Objekt sind Sie spöttisch.
Beispiel:
class RealGuy {
....
public void someMethod(Customer customer) {
Customer customer = new Customer(145);
}
}
class MyUnitTest() {
public Customer customerMock = createMock(Customer.class)
public void test1() {
//i can inject the mock object, but it's still calling the constuctor
realGuyobj.someMethod(customerMock);
//the constructor call for constructor makes database connections, and such.
}
}
Wie kann ich erwarten, dass ein Konstruktor aufrufen? Ändern kann ich den Kunden Konstruktor-Aufruf zu verwenden, newInstance, aber ich bin mir nicht sicher, ob das helfen wird. Ich habe keine Kontrolle darüber, was der Körper des new Customer(145)
Konstruktor tut.
Ist das möglich?
- Es wäre eine gute Idee, um nicht-Datenbank-verbindungen in einem Konstruktor. Injizieren der verbindungen, die in der Klasse mit Ihnen.
- Vereinbart. Aber ich don' haben die Kontrolle über das Kunden-Konstruktor-Logik.
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie dies mit EasyMock 3.0 und oben.
createMockBuilder
wird Ihnen helfen, zu erstellen Sie eine partielle mock a-Klasse in den test-code. Dies wird nicht verspotten ein Konstruktor aufgerufen, insomeMethod
.Können Sie nicht mit easymock, als es keine Unterstützung von mocking-Konstruktoren. Es gibt eine Bibliothek namens powermock, die das können und die nur Spott Bibliothek, soweit ich weiß, kann das stub-Konstruktoren und statische Methoden in Java.
Und das ist, warum Sie möchten, Spritzen Sie Ihre Abhängigkeiten (via Guice oder ähnliches Paket) erstellen, anstatt Sie in Ihre Klasse.
Dann müssen Sie nicht HABEN, ZU verhöhnen, Ihre Konstruktion.
Dies setzt Voraus, dass (a) dies ist Ihr code, den Sie ändern können, und (b) dass die fraglichen Objekte sind Komplex genug ist, sollten Sie Spritzen, Sie. Konstruktion einfacher Objekte, die sich innerhalb Ihrer Klasse sind in Ordnung, aber dann sollten Sie nicht brauchen, um Sie zu verhöhnen.