2016-04-27 7 views
0

aus der Lektüre Ich habe eine Singleton Java Eigenschaften Klasse (RepositoryProperties.java), die aus einer Textdatei liest den Wert von der readFromSql Methode zurückgegeben zu bekommen:Wie der Wert zurück verspotten einer Eigenschaftendatei in JMock Test

public boolean readFromSql() { 
    String lPhase = getPilotProfileDatabaseTransitionPhase(); 
    if (lPhase.equals("PHASE_ONE_SQL")) { 
     return true; 
    } else 
     return false; 
} 

Dann, wenn ich eine Aufzeichnung über meine Repository-Implementierungsklasse hinzufügen möchten, ich habe diesen Wert zu überprüfen, um zu wissen, welche Codeblock auszuführen:

if (RepositoryProperties.getInstance().readFromSql() 
     { 

.. wenn sie wahr sind, schreiben die Daten in SQL, sonst überspringen dieser Block

Jetzt muss ich einen Jmock Komponententest für meine Repository add Methode hinzufügen, so dass die readFromSql Methode true zurückgibt (ein anderer Test testet den false Wert), ohne eine Abhängigkeit von der Textdatei einzuführen. Ich fürchte, Jmock ist komplett neu für mich und ich kann mir nicht vorstellen, wie man den Wert von readFromSql verspottet. Ich habe keine Setter-Methode.

Ich habe versucht, eine Erwartung für das Hinzufügen, aber es ist nicht der richtige Ansatz (glaube nicht, dass dies in den Erwartungen gehört) und meine Syntax ist auch falsch:

myMockContext.checking(new Expectations() { 
{ 
     RepositoryProperties.getInstance().readFromSql(); 
     will(returnValue(true)); 

Wäre wirklich zu schätzen eine wenig Anleitung, wie man um das richtig zu machen und wo.

Antwort

0

JMock ist in der Regel um die Idee der Inszenierung von Instanzen von Schnittstellen konzipiert. Sie können bekommen, um Instanzen von Klassen zu verspotten, obwohl es nicht empfohlen wird. Was Sie versuchen, ist noch mehr als das - Sie wollen eine statische Methode verspotten. Das ist sehr gegen JMocks Philosophie und Jmock wird euch jeden Schritt bekämpfen. Vielleicht möchten Sie alternative Frameworks wie PowerMock und betrachten, die mehr Flexibilität haben, Mocks in Situationen zu verwenden, in denen Sie keine klare Testnaht (d. H. Eine injizierte Schnittstelle) haben.

Auch - das Singleton-Muster ist in diesen Tagen ziemlich alte Schule. Singletons, die mithilfe des Musters implementiert wurden, erzeugen Testprobleme, wie Sie sehen, und echte Anforderungen für Singleton-Verhalten können im Allgemeinen mithilfe von DI-Bereichen effektiver implementiert werden. Vielleicht möchten Sie in diesem Fall Ihr Bedürfnis nach einem Singleton berücksichtigen - können Sie es ändern?