模拟聚合类

问题描述 投票:1回答:1

我们在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));

如果模拟A1对象的语法,并在/ verify时使用它是正确的,你能帮忙吗?

另一个问题是,是否没有必要为a1创建模拟,应该使用哪种语法?例如,以下是否可以?

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

谢谢

unit-testing testing junit mocking mockito
1个回答
0
投票

模拟A1的语法与模拟A没有什么不同。您只需要确保与A1的任何交互(例如mockA1.m2())被模拟或包含有效数据(如果A1不是模拟)。

如果你在嘲笑A1,那么你的代码是正确的:

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");

如果A1不是模拟,那么你不需要像上面的when(mockA1.m2()).thenReturn(...)一样模拟它的方法:

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

when(mockA.getInfo()).thenReturn(6.4);
when(mockA.getA1()).thenReturn(realA1);
© www.soinside.com 2019 - 2024. All rights reserved.