unit-testing - 模拟聚合类

标签 unit-testing testing junit mocking mockito

我们在类 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 对象并在 when/verify 中使用它的语法正确,您能帮忙吗?

另外一个问题是,如果a1不需要创建mock,应该使用什么语法呢?比如下面这样可以吗?

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

谢谢

最佳答案

模拟 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 不是 mock,那么您不需要像上面的 when(mockA1.m2()).thenReturn(...) 那样模拟它的方法:

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

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

关于unit-testing - 模拟聚合类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55658790/

相关文章:

oop - 缺陷 : Constructor does Real Work

unit-testing - 测试 Angular 2 中 "(window:resize)"事件触发的函数

jquery - Selenium:根据兄弟元素文本选择元素

php - 使用 WAMP 2.0 在本地测试 FTP?

spring - 升级到 4.1.4.RELEASE 后,在上下文创建时错误地创建了原型(prototype)范围的 Spring bean

java - 使用 JUnit 测试返回多个值的 API

testing - 使用 TestNG 执行测试包时,父类(super class)被多次实例化

java - 从代码覆盖中排除枚举类?

java - 有没有办法在 JUnit 测试中使用 JMS?

ruby - 模型中的 RSpec 模拟或 stub super