2016-05-24 2 views
0

Я делаю тестовые примеры, и я не знаю, как проверить эту функцию. Не могли бы вы дать мне несколько идей? Я пытался использовать Mockito, но я все равно получаю null. Буду признателен за вашу помощь.Android Test - Как я могу проверить эту функцию?

Это функция, которую я хочу проверить.

public static Date optDate(JSONObject json, String key) { 
    if(!json.isNull(key)) { 
     try { 
      DateTime dt = JSONUtils.dateFormatter.withZoneUTC().parseDateTime(json.optString(key)); 
      Date date = dt.toDate(); 
      return date; 
     } catch(Exception e) { 
     } 
    } 
    return null; 
} 

И я тестирую его таким образом.

@RunWith(MockitoJUnitRunner.class) 
public class JSONUtilsTest { 
    static String dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; 
    static DateTimeFormatter dateFormatter = DateTimeFormat.forPattern(dateFormat); 
    DateTime dt = JSONUtilsTest.dateFormatter.withZoneUTC().parseDateTime("2011-11-02T02:50:12.208Z"); 
    Date date = dt.toDate(); 

    @Mock 
    JSONObject JSONMock = Mockito.mock(JSONObject.class); 
    JSONUtils mJSONUtils = Mockito.mock(JSONUtils.class); 


    @Before 
    public void setup() { 
     doReturn(date).when(mJSONUtils).optDate(JSONMock,"possessionDate"); 
    } 


    @Test 
    public void optDateShouldReturnValueOnValidString() { 
      Date result = JSONUtils.optDate(JSONMock, "possessionDate"); 
      Assert.assertEquals("2011-11-02",result); 

    } 


} 

***************************** ИЗМЕНИТЬ 1 ************ ***********************************

После попытки найти правильный способ протестировать этот метод , Я сделал это.

@RunWith(MockitoJUnitRunner.class) 
public class JSONUtilsTest { 

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
    Date today = new Date(); 
    String todayString = dateFormat.format(today); 

    @Mock 
    JSONObject JSONMock = Mockito.mock(JSONObject.class); 

    @Before 
    public void setup() { 
     when(JSONUtils.optString(JSONMock, "possessionDate")).thenReturn(todayString); 

    } 

    @Test 
    public void optDateShouldReturnValueOnValidString() { 
     Date result = JSONUtils.optDate(JSONMock, "possessionDate"); 
     Assert.assertEquals(today,result); 
    } 
+0

Если я ошибаюсь: единственное, что вам нужно для управления здесь, - это объект 'json'. Значение: вы можете/должны проверить, вызваны ли эти два метода 'isNull()' и 'optString()' для объекта, который вы предоставили тестируемому методу. – GhostCat

+0

@ Jägermeister Как я могу это сделать? Я пытался проверить, возвращает ли этот метод правильное значение. Im test 'opString()' следующим образом: @Before public void setup() { когда (JSONUtils.optString (JSONMock, «name»)). ThenReturn («Daniel»); когда (JSONUtils.optString (JSONMock, "city")). ThenReturn (null); когда (JSONUtils.optString (JSONMock, «lastname»)), затемReturn (""); } @Test общественного недействительными optStringShouldReturnValidStringOnName() { результат String = JSONUtils.optString (JSONMock, "название"); Assert.assertEquals (результат «Даниэль»); } –

+0

Вы создаете макет, который ожидает два вызова и возвращает то, что вы хотите вернуть? Как в вашем методе настройки? – GhostCat

ответ

0

Ложных на основе тестирования всегда работает так:

  1. Вы создаете какое-то фиктивного объект определенного класса
  2. Вы «инструктировать» Ложные для ожидаемых вызовов и указать возможные возвращаемые значения
  3. Вы запускаете свой «тест кода»; используя этот макет-объект в качестве «ввода» в ваш тестируемый код
  4. Вы проверяете, что ваш «код под тестированием» создает ожидаемые выходы; в зависимости от вашей издевательской структуры, вы проверяете, что ваш mock-объект видел указанные вызовы.
+0

Благодарим вас за ответ. Я знаю, как его создать, но я не знаю, как его использовать. Первый раз делал тесты. Я много читал, но все разные примеры для того, что у меня есть. Я редактировал свои вопросы, пожалуйста, проверьте это. Я пытаюсь проверить метод, делая то, что вы сказали. Не уверен, что я сделал это хорошо. –

Смежные вопросы