2012-02-03 4 views
1

Пытается использовать EasyMock для проверки, вызван ли защищенный метод, не уверен, что это лучший способ сделать это ... но с учетом ниже, как я могу сказать, что didIgetCalled() на самом деле был вызываемый при вызове callMe()?EasyMock и тестирование Защищенные методы

public Class testMe(){ 
    public int callMe(){ 
     if(true){ 
      didIgetCalled(); 
     } 
     return 1; 
    } 
    protected int didIgetCalled(){ 
     return 2; 
    } 
} 
+1

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

+0

Хорошо ... Кинда знал это, но задавался вопросом, есть ли способ проверить, вызван ли какой-то метод или нет из родительского метода, было бы неплохо иметь. – Phoenix

+0

Да, обычно достаточно не проверять, какие именно методы были вызваны, а скорее, только если состояние объекта после вызова - это то, что вы ожидаете от него. Таким образом, в вашем примере, если вы проверите возвращаемое значение callMe(), этот метод, который был внутренне вовлечен, не имеет отношения к внешней стороне. – centic

ответ

2

Это способ, вы можете проверить метод без использования EasyMock, однако моя рекомендация состоит в том, что: Если это не публично, не написать тест для него

Method method = testMe.class.getDeclaredMethod("didIgetCalled", new Class[]{}); 
method.setAccessible(true); 
testMe testClass = new testMe(); 
int invoke = (Integer) method.invoke(testClass); 
assertEquals(2,invoke); 

Я знаю, что это не будет полностью решить вашу проблему, но это начало :)

0

Как об этом:

Вы можете сохранить то же имя пакета для ваш тестовый класс, как класс тестируемого класса. Таким образом, если ваш класс под тестированием говорит, что MyClass.java находится в каталоге src с именем пакета com.abc.mypackage, то вы, ваш тестовый класс, скажете, что MyClassTest.java может быть в каталоге test с таким же именем пакета. Смотрите рисунок ниже:

enter image description here

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