Насмешливая совокупность классов - PullRequest
1 голос
/ 12 апреля 2019

у нас есть следующий метод внутри класса C:

public static void m(a A, b B)
{
......

A1 a1=new a.getA1;  //Not sure about the syntax
Double d1= a.getInfo;
.....

if (d1>5.0)
  {
   b.add(d1,a1)   
  }
}

A - другой класс.Внутри A у нас есть переменная, объявленная как тип класса A1 (я думаю, это делает A агрегированным классом).Я определил следующее как фиктивные объекты:

private mockA = mock(A.class);
private mockA1 = mock(A1.class);   // Please help with syntax
private mockB = mock(B.class)

Также

when(mockA.getInfo()).thenReturn(6.4);
when(mockA.getA1()).thenReturn(mockA1);    //Please help with syntax
when(mockA1.m2()).thenReturn("Some More Details");   // Please help with syntax  

m(mockA, mockB);

// In case > 5.0
verify(mockB,times(1)).add(6.4,mockB);

//in case < 5.0
verify(mockB,times(0)).add(anyDouble,any(B.class));

Не могли бы вы помочь, если синтаксис для насмешливого объекта А1, и использовать его, когда / проверять правильно?

Другой вопрос: если нет необходимости создавать макет для a1, какой синтаксис следует использовать?Например, хорошо ли следующее?

 when(mockA.getA1().m2())).thenReturn("Something");

Спасибо

1 Ответ

0 голосов
/ 24 апреля 2019

Синтаксис для имитации А1 ничем не отличается от того, что используется для имитации А. Вам просто нужно убедиться, что любые взаимодействия с А1 (например, mockA1.m2()) либо имитируются, либо содержат действительные данные (если А1 не является имитацией).

Если вы издеваетесь над А1, значит ваш код верен:

A mockA = mock(A.class);
A1 mockA1 = mock(A1.class);

when(mockA.getInfo()).thenReturn(6.4);
when(mockA.getA1()).thenReturn(mockA1);
when(mockA1.m2()).thenReturn("Some More Details");

Если А1 не издевается, вам не нужно издеваться над его методами, как это делается с when(mockA1.m2()).thenReturn(...) выше:

A mockA = mock(A.class);
A1 realA1 = new A1();

when(mockA.getInfo()).thenReturn(6.4);
when(mockA.getA1()).thenReturn(realA1);
...