2017-02-22 10 views
0

Я пытаюсь написать тестовый пример для моей java-функции. Моя функция что-то из следующего типаИгнорировать код при тестировании функции с помощью junit

public static String parse33_05_x_Data(String message, Transaction transaction){ 
    String returnValue=""; 
    /** 
    *Some Java code which I actually want to test. 
    * 
    **/ 
    //Writing the transaction to the file. 
    FileManager.getInstance().WriteDataToFile(transaction); 
    return returnValue; 
} 

Но в приведенном выше коде я хочу, чтобы как-то игнорировать/издеваться линия FileManager.getInstance().WriteDataToFile(transaction); как это дает исключение. без внесения каких-либо изменений кода в указанную выше функцию.

Независимо от того, какие изменения необходимы, должно произойти внутри моего Test class.

Можно ли сделать что-то подобное?

Заранее благодарен!

ответ

0

Вы должны поместить экземпляр fileManager в качестве параметра. Тогда можно высмеять этот экземпляр.

public static String parse33_05_x_Data(String message, FileManager fileManager, Transaction transaction){ 
    String returnValue=""; 
    /** 
    *Some Java code which I actually want to test. 
    * 
    **/ 
    // mock doesnt write 
    fileManager.WriteDataToFile(transaction); 
    return returnValue; 
} 

В качестве альтернативы (вы пишете вы не хотите, чтобы изменить метод), вы можете использовать PowerMockito издеваться статический метод FileManager.getInstance(), но я бы не рекомендовал это, потому что, по моему мнению, это код запах.

0

Вы можете использовать тестовый фреймворк под названием Mockito для «издевки» параметров. Это позволит создать FileManager, который «ничего не делает».

Вы должны реорганизовать FileManager параметра, чтобы сделать его mockable

public static String parse33_05_x_Data(String message, Transaction transaction){ 
    String returnValue=""; 
    /** 
    *Some Java code which I actually want to test. 
    * 
    **/ 
    //Writing the transaction to the file. 
    FileManager.getInstance().WriteDataToFile(transaction); 
    return returnValue; 
} 

к:

public static String parse33_05_x_Data(String message, Transaction transaction, FileManager fileManager){ 
    String returnValue=""; 
    /** 
    *Some Java code which I actually want to test. 
    * 
    **/ 
    //Writing the transaction to the file. 
    fileManager.WriteDataToFile(transaction); 
    return returnValue; 
} 

Вы можете использовать Mockito издеваться объектами в ваших тестовых случаях JUnit так:

@Test 
public void test1() { 
     // create mock 
     FileManager mockedFileManager = Mockito.mock(FileManager.class); 

     // define return value for method 
     when(mockedFileManager.WriteDataToFile()).thenReturn("something"); 


     // use mock in test.... 
     assertEquals(MyObj.parse33_05_x_Data("message") new Transaction(), mockedFileManager), "expected value"); 
} 
Смежные вопросы