有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否列出服务模拟以随机返回所需值?

我有一个包含其他服务列表的服务

public class MyFrontService {
    @Autowired
    private Set<? extends MyAbstractService> allMyServices;
}

它运行集合中的所有服务。这是MyAbstractService的签名

public abstract class MyAbstractService {
     boolean myMethod();
}

如果allMyServices中的任何服务返回false,则myFrontService返回false;只有当它的所有服务都返回true时,它才会返回true

我想知道如何使用Java8方式对MyFrontService进行单元测试。理想情况下,我可以指定集合中的许多服务返回true,而其他服务返回false

非常感谢任何帮助/提示


共 (2) 个答案

  1. # 1 楼答案

    这不是特定于Java8的,但在测试框架内,您可以创建扩展MyAbstractService的“伪”测试服务类,每个类都决定成功或失败。在这些测试类中,您可以重写方法以生成MyFrontService将要检查的特定结果

  2. # 2 楼答案

    您可以在服务的测试类中使用Mockito,可以尝试:

    MyAbstractService mockAbstractService1 = mock(MyAbstractService.class);
    when(mockAbstractService1.myMethod()).thenReturn(true);
    MyAbstractService mockAbstractService2 = mock(MyAbstractService.class);
    when(mockAbstractService2.myMethod()).thenReturn(false); 
    
    HashSet<MyAbstractService> abstractServices = new HashSet<MyAbstractService>();
    abstractServices.Add(mockAbstractService1);
    abstractServices.Add(mockAbstractService2);
    
    MyFrontService testFrontService = new MyFrontService();
    testFrontService.allMyServices = abstractServices;
    

    像这样,您创建mock(空对象,具有与您创建它所用的类相同的函数和属性,但除非您添加“when”,否则什么也不做),并且使用您定义的“when”,每次调用对象的myMethod(),它都会返回您在when()的thenReturn()中编写的任何内容。因此,每次为mockAbstractService1调用myMethod(),它都会返回true,而为mockAbstractService2调用myMethod则会返回false