Może trochę za bardzo uprościłem pisząc powyżej. Wstawiam kod, uproszczony jak się da:
Klasa testowana ( superklasa moich innych klas, ale chciałbym ją przetestować):
public abstract class GameBaseObject implements Comparable<GameBaseObject> {
protected int mX;
protected int mY;
protected int mWidth;
protected int mHeight;
GameBaseObject(ObjectParameters p) {
mX = p.getX();
mY = p.getY();
mWidth = p.getWidth();
mHeight = p.getHeight();
}
public Rect getRectangle() {
return new Rect(
(int)(mX + 0.1*mWidth),
(int)(mY + 0.1*mHeight),
(int)(mX + 0.9*mWidth),
(int)(mY + 0.9*mHeight));
}
}
Klasa ObjectParameters to prosty wrapper na parametry. Zostawiłem tylko to, co potrzebne do zainicjowania Rect. Instancję tej klasy w klasie testowej dodaję jako @mock ( źródło problemu?).
public class ObjectParameters {
private int x;
private int y;
private int width;
private int height;
...
public ObjectParameters(...) {
...
}
// gettery
}
Klasa testowa:
@RunWith(MockitoJUnitRunner.class)
public class GameBaseObjectTest {
// wrapper na parametry
@Mock
ObjectParameters paramObject1;
// klasa z metodą getRectangle();
private GameBaseObject gameObject1;
@Before
public void setupForTests() {
MockitoAnnotations.initMocks(this);
setupParams();
initObjects();
}
private void setupParams() {
when(paramObject1.getX()).thenReturn(100);
when(paramObject1.getY()).thenReturn(100);
when(paramObject1.getWidth()).thenReturn(100);
when(paramObject1.getHeight()).thenReturn(100);
}
private void initObjects() {
gameObject1 = new GameBaseObject(paramObject1) {};
// najprościej jak się da, sprawdzenie pól ( nie testy, ale żeby sprawdzić w samych testach;)
System.out.println(gameObject1.mX);
System.out.println(gameObject1.mY);
System.out.println(gameObject1.mWidth);
System.out.println(gameObject1.mHeight);
( konsola zwraca 100, 100, 100, 100)
System.out.println(gameObject1.getRectangle);
( konsola zwraca null ??)
}
@Test
public void getRect_ShouldReturnRectSmallerThanObject() {
assertFalse(gameObject1.getRectangle().contains(gameObject1.mX, gameObject1.mY));
}
}
W pierwszej chwili pomyślałem, że to wina tego, że testowana klasa jest abstract. Ale w testach można ją zainicjować (?).
Drugim podejrzanym miejscem był dla mnie ten wrapper @mock na parametry, ale w sprawdzeniu z tymi System.out... zwracane są dobre wartości pól klasy.
Z jakiegoś powodu te pola są "niewykryte" w metodzie getRectangle().
Może jest tutaj coś oczywistego, ale jak pisałem, pierwszy dzień grzebania i z tego powodu takie problemy mam.