There are various ways to write unit tests.
A) You observe behavior. You create an object of your class under test, then you call methods; and then you assertThat on the values that are returned.
B) When your object uses other objects, then you might have to turn to mocking frameworks, for example to verify that you see the expected method calls on those objects.
In your case, it really depends on what m1/m2 are doing. As said - the best unit tests are those that only check the "observable" behavior of your code under test. Like those examples:
@Test(expected=NullPointerException.class)
public void testMyMethodWithNull() {
new MyClass().myMethod(null);
}
The above would check that when calling your method with null ... a NPE is thrown.
@Test
public void testMyMethodWithEmptyString() {
MyClass underTest = new MyClass();
assertThat(underTest.myMethod(""), is("some expected string for empty input"));
}
That one does some different checking for EMPTY input.
And so you work your way through all inputs that make sense. Of course, the idea here is that all possible behavior of your class under test can be checked this way. If there are others that come into play, you have to take them into consideration of course. But ideally, that should not be the case: you should design all your code so that it can be fully tested as easily as possible; and ideally without the need to write anything else but such kind of tests.