2017-02-15 3 views
3

Ich habe ein Projekt mit vielen Testdateien. In einer der Test-Klassen muss ich Finall Class spielen. Als ich es herausfand, kann mit MockMaker (link) durchgeführt werden, jedoch bricht das alle meine anderen Klassen Test als Grund showin:Mock Maker für Einzeltest Klasse

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'. 
For example: 
when(mock.getArticles()).thenReturn(articles); 

ohne MockMaker alle anderen Tests sind in Ordnung.

Wie kann ich angeben, MockMaker nur für eine einzelne Testklasse zu verwenden?

Antwort

1

Versuchen PowerMockito mit .. es befasst sich auch mit Finale und Statik:

<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-api-mockito</artifactId> 
    <version>1.6.5</version> 
    <scope>test</scope> 
</dependency> 

eine finale Klasse Mocking:

import org.junit.runner.RunWith; 
import org.mockito.Mockito; 
import org.powermock.api.mockito.PowerMockito; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest({MyFinalClass.class}) 
public class MyTest { 

    @Test 
    public void myFinalClassTest() { 
     MyFinalClass finalMock= PowerMockito.mock(MyFinalClass .class); 


     Mockito.when(finalMock.toString()(testInput)).thenReturn("abc"); 

     // Assertions    
    } 

} 

Sie diese Funktion verwenden, nur dort, wo es gebraucht wird .. in allen anderen Orte, an denen Sie Ihre ursprüngliche Mockito-Nutzung behalten können.

+0

ich nicht erlaubt bin pom mein Projekt ändern, ich kann auch nicht von Klasse ändern „finall“ –

0

Sie können keine endgültige Klasse verspotten auf diesen Link basiert: https://github.com/mockito/mockito/wiki/FAQ#what-are-the-limitations-of-mockito

sehen diese Links:

How to mock a final class with mockito

How to mock a final class with mockito

try Strom Mockito wie folgt zu verwenden:

public final class Plane { 
    public static final int ENGINE_ID_RIGHT = 2; 
    public static final int ENGINE_ID_LEFT = 1; 

    public boolean verifyAllSystems() { 
     throw new UnsupportedOperationException("Fail if not mocked!"); 
    } 

    public void startEngine(int engineId) { 
     throw new UnsupportedOperationException(
       "Fail if not mocked! [engineId=" + engineId + "]"); 
    } 
} 

public class Pilot { 
    private Plane plane; 

    public Pilot(Plane plane) { 
     this.plane = plane; 
    } 

    public boolean readyForFlight() { 
     plane.startEngine(Plane.ENGINE_ID_LEFT); 
     plane.startEngine(Plane.ENGINE_ID_RIGHT); 
     return plane.verifyAllSystems(); 
    } 
} 

und letzte Klasse testen:

@PrepareForTest(Plane.class) 
public class PilotTest extends PowerMockTestCase { 
    @Test 
    public void testReadyForFlight() { 
     Plane planeMock = PowerMockito.mock(Plane.class); 
     Pilot pilot = new Pilot(planeMock); 

     Mockito.when(planeMock.verifyAllSystems()).thenReturn(true); 

     // testing method 
     boolean actualStatus = pilot.readyForFlight(); 

     Assert.assertEquals(actualStatus, true); 
     Mockito.verify(planeMock).startEngine(Plane.ENGINE_ID_LEFT); 
     Mockito.verify(planeMock).startEngine(Plane.ENGINE_ID_RIGHT); 
    } 
} 

Beispiel Link: https://dzone.com/articles/mock-final-class