2015-12-09 3 views
0
@Test 
public void verifyAttribute_getEnforceUserGroup_True() 
{ 
    boolean flag= false; 

    new MockUp<DataCache>() 
    { 
     @Mock 
     public HashMap getSitesCache() 
     { 
      return map; 
     } 

    }; 

    new Expectations() 
    { 
     { 
      cach.getSitesCache().get(anyInt); 
      returns(site); 

      site.getEnforceUserGroups(); 
      returns(1); 
     } 
    }; 

    try 
    { 
     flag =enforceObj.verifyAttribute(); 
     assertEquals(true, flag); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

Я не могу издеваться этот get(int key) метод HashMap класса. Кэч и сайт являются издеваемыми объектами их соответствующих классов. Если я прокомментирую cach.getSitesCache.get(anyInt) и добавлю map.get(key), он дает ту же ошибку. Мой вопрос:java.lang.IllegalArgumentException: Пытались рекорд ожидания на unmockable метода в JMockit

как насмехаться get(int) метод HashMap класс?

Здесь getSitesCache() метод возвращает HashMap. Теперь, передав ключ в качестве аргумента метода get, я получил объект. Теперь объект преобразуется в объект сайта.

Как издеваться над этим?

ответ

0

Mocking HashMap не допускается; вместо этого тест должен вернуть реальную карту от getSitesCache().

+0

Не могли бы вы уточнить? Почему это не разрешено? –

+0

Потому что насмешка 'HashMap' всегда плохая идея. Значит, вы можете написать гораздо лучший тест *, не делая этого. Это вопрос XY, который не показывает актуальную проблему, которая должна быть решена. Вместо этого следует сосредоточиться на том, что нужно протестировать, не принимая конкретного решения. –

+0

Хорошо, поэтому сам JMockit не мешает java.util.HashMap, вы просто заявляете, что это не очень хорошая идея. Для справки, с тех пор я понял, как издеваться над HashMap с JMockit, поэтому можно действительно придумать встроенные классы Java. –

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