К точке зрения @JB Низета, да, хорошо бы провести рефакторинг для тестируемости.Часто рефакторинг, чтобы сделать код более тестируемым, приводит к коду, который лучше по другим причинам - разделение проблем и тому подобное.Это не всегда возможно сделать.Скажите, что это не ваш код, или у вас есть какое-то другое требование оставить его в покое (потому что многие другие классы полагаются на то, что он есть) или что-то в этом роде.
Если я понимаю, что вам нужно сделать, яЯ думаю, что вы можете сделать это с помощью шпиона:
Worker workerUnderTest = new Worker();
Worker spiedWorkerUT = spy(workerUnderTest);
Helper mockHelper = mock(Helper.class);
when(spiedWorkerUT.createHelper()).thenReturn(mockHelper);
Integer actual = spiedWorkerUT.someWork();
verify(mockHelper).change(0);
Затем используйте spiedWorkerUT вместо workerUnderTest для запуска ваших тестов.
Не всегда возможно избежать создания экземпляра того, что вы хотите высмеять.Для этого есть PowerMock .
Helper mockHelper = mock(Helper.class);
whenNew(Helper.class).withNoArguments().thenReturn(mockHelper);