Mocking was a thing long before mocking libraries were a thing.
To write a mock yourself just step between what you're testing and what you want to mock and pretend to be it.
This works well with the typical Arrange, Act, Assert testing pattern. Just set up your mock in arrange, act on it, then assert that it got what it was supposed to get.
Doing that might look like this:
@Test
public void testControler() {
TestUseCases.PushMock interactorMock = new TestUseCases.PushMock();
new ButtonControler(interactorMock).push();
assertTrue( interactorMock.isPushed() );
}
Some people complain that you're just testing that a method was called. And they're right. But this isn't just any method. This is a method that sends a message out of this codebase. It's sending output. But it doesn't return anything. So all we can test is that it was called.
That is an ideal mocking situation. Because you can't simply rewrite that so that the method returns. When people ask for testable code often what they really want is functional code. And much of your behavior can be pushed down into functional code that returns something testable. But we don't just write functional code. Some of our code is Object Oriented code that sends messages using methods. When that crosses a significant boundary moving the method isn't an option. Mocking can make that testable.
What you can move is all interesting behavior code away from this boundary until the only code left here is boring structural code that doesn't do much and needs no more testing than a casual glance.
Mocking always has been and always will be a pain. It is worth the effort to rewrite your code to minimize the need for it. But it is something you can do with your existing language without asking for magic. None of this requires a mocking library. Just the discipline of knowing how to test this way.
Avoid having lots of one-off test dummy implementations littering the class hierarchy
Again, make mocking rare. Push interesting behavior down into testable code away from the significant boundaries that would require mocks.