2014-02-04 2 views
1

В JMockit, как вы устанавливаете ожидание того, что метод будет называться 1 раз для известного аргумента (или издевательства), но установить его с ошибкой если он вызывает метод с другим аргументом.Как записать ожидаемое JMockit для известного аргумента, но сбой, если метод вызывается с другим аргументом

Т.е. я хочу установить математическое ожидание для times = 1 где Arg = "XYZ", но times = 0 для любого другого вызова метода, где Arg! = "XYZ".

Заказ этих ожиданий только в результате моего теста завершился неудачей. Я нашел способ сделать это, хотя для меня это довольно громоздко я чувствую, вот код:

  obj.getDTOs(anyString); 
      result = new Delegate() { 
        List<DTO> getDTOs(String testArg) 
        { 
         if (testArg.equals(expectedString)) { 
          return Collections.<DTO>emptyList(); 
         } else { 
          throw new IllegalArgumentException(); 
         } 
        } 
      }; 
      result = Collections.<DTO>emptyList(); 
      times = 1; 

Является ли это лучший способ?

ответ

1

Ниже будет работать, хотя это также может быть сделано с Delegate:

static class Service { 
    List<?> getDTOs(String s) { return null; } 
} 

@Test 
public void example(@Mocked final Service obj) { 
    new NonStrictExpectations() {{ 
     obj.getDTOs("XYZ"); times = 1; // empty list is the default result 
     obj.getDTOs(withNotEqual("XYZ")); times = 0; 
    }}; 

    assertEquals(0, obj.getDTOs("XYZ").size()); 
    obj.getDTOs("abc"); // fails with "unexpected invocation" 
} 

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

  • Нет связанных вопросов^_^