Из фрагмента я предполагаю, что MyTestObject использует отражение, или статический метод или поле, чтобы получить DAO, поскольку у него нет параметров конструктора. JMock не выполняет замену объектов по типу (и в любой момент будет куча людей, рекомендующих другие фреймворки, которые это делают).
Это специально. Цель JMock состоит в том, чтобы выделить слабые стороны объектного дизайна, требуя чистых зависимостей и сфокусированного поведения. Я обнаружил, что утечка доступа к DAO / JDBC в доменных объектах в конечном итоге приводит к неприятностям. Это означает, что доменные объекты имеют секретные зависимости, которые затрудняют их понимание и изменение. Я предпочитаю сделать эти отношения явными в коде.
Итак, вы должны каким-то образом вставить макет объекта в целевой код. Если вы не можете или не хотите этого делать, вам придется использовать другой фреймворк.
P.S. Одна точка стиля, вы можете немного упростить этот тест:
context.checking(new Expectations() {{
allowing(myDAO).getSet(12); will(returnValue(new HashSet<String>()));
}});
в рамках теста вы должны действительно знать, какие значения следует ожидать, и учитывать их в ожидании. Это облегчает просмотр потока значений между объектами.