2014-11-02 2 views
3

У меня есть код, который имеет статический метод внутри конечного класса. Я пытался издеваться над этим методом. Я попытался сделать несколько вещей.Как высмеять статический метод в конечном классе

public final Class Class1{ 

public static void doSomething(){ 
    } 
} 

Как я могу сделать mock doSomething()? Я пытался ..

Class1 c1=PowerMockito.mock(Class1.class) 
PowerMockito.mockSatic(Class1.class); 
Mockito.doNothing().when(c1).doSomething(); 

Это дает мне ошибку:

org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here: 
-> at com.cerner.devcenter.wag.textHandler.AssessmentFactory_Test.testGetGradeReport_HTMLAssessment(AssessmentFactory_Test.java:63) 

E.g. thenReturn() may be missing. 
Examples of correct stubbing: 
    when(mock.isOk()).thenReturn(true); 
    when(mock.isOk()).thenThrow(exception); 
    doThrow(exception).when(mock).someVoidMethod(); 
Hints: 
1. missing thenReturn() 
2. you are trying to stub a final method, you naughty developer! 

    at org.powermock.api.mockito.internal.invocation.MockitoMethodInvocationControl.performIntercept(MockitoMethodInvocationControl.java:260) 

ответ

0

Наиболее используемое тестирование рамка является JUnit 4. Таким образом, если вы используете его, вы должны аннотировать тестовый класс с:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Class1.class) 

чем

PowerMockito.mockSatic(Class1.class); 
Mockito.doNothing().when(c1).doSomething(); 

Mockito.when(Class1.doSomething()).thenReturn(fakedValue); 

// call of static method is required to mock it 
PowerMockito.doNothing().when(Class1.class); 
Class1.doSomething(); 
+0

Я пытался сделать это, но не успех. В моем случае я пишу тестовый пример для 'Class2', который имеет некоторый метод, который использует' Class1'. «Класс1» является окончательным. и метод, который я хочу высмеять внутри 'Class1', является статическим окончательным. –

0

Я использую PowerMock. Это позволит вам делать то, что не может сделать Мокито. https://github.com/powermock/powermock/wiki

@RunWith(PowerMockRunner.class) 
@PrepareForTest(StaticClass.class) 
public class StaticTest { 

@Before 
public void setUp() { 
    PowerMockito.mockStatic(Bukkit.class); 

    //When a static method with no arguments is called. 
    when(StaticClass.callMethod1()).thenReturn(value); 

    //When a static method with an argument is called. 
    when(StaticClass.callMethod2(argument)).thenReturn(value2); 

    //Use when you don't care what the argument is.. 
    //use Mockito.anyInt(), Mockito.anyDouble(), etc. 

    when(StaticClass.callMethod3(Mockito.anyString())).thenReturn(value3); 
    } 

@Test 
public void VerifyStaticMethodsWork() { 
    assertEquals(value, StaticClass.callMethod1()); 
    assertEquals(value2, StaticClass.callMethod2(argument)); 
    assertEquals(value3, StaticClass.callMethod3("Hello")); 
} 

}