Перемешанный интерфейс является нулевым - PullRequest
0 голосов
/ 31 июля 2011

Я пытаюсь смоделировать DAO с JMockit:

public interface MyDao {
    Details getDetailsById(int id);
}

С этим тестовым классом:

public class TestClass {

    @Test
    public void testStuff(final MyDao dao) throws Exception
    {
        new Expectations()
        {
            {
                // when we try to get the message details, return our sample
                // details
                dao.getDetailsById((Integer) any);  ***THROWS AN NPE
                result = sampleDetails;
            }
        };

        ClassUsingDao daoUser = new ClassUsingDao(dao);
        // calls dao.getDetailsById()
        daoUser.doStuff();
}

Когда объект дао используется в блоке Ожидания, создается NPE. Я попытался переместить объявление dao в переменную-член, помеченную @Mocked, но происходит то же самое. Я также пытался использовать конкретную реализацию MyDao, и происходит то же самое.

1 Ответ

2 голосов
/ 31 июля 2011

Это не dao, это ноль, но any.Распаковка из Integer (после приведения) в int включает разыменование, которое вызывает исключение NullPointerException.Попробуйте вместо этого использовать anyInt.

Я не думаю, что документация jMockit говорит о фактическом значении Expectations.any , но обратите внимание, что он может быть успешно приведен к любому другомутип (можно сказать (String)any и (Integer)any).Единственное значение в Java, для которого все приведения всегда будут успешными, это null.Итак, Expectations.any должно быть нулевым.Немного удивительно, но на самом деле неизбежно.

...