制作服务模拟列表以随机返回所需值?

时间:2018-11-13 21:05:47

标签: java unit-testing java-stream

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

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

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

public abstract class MyAbstractService {
     boolean myMethod();
}

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

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

任何帮助/提示都将受到感激

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

def build_all_dataset(self):
    self.build_dataset(ROUTE_TRAIN)
    self.build_dataset(ROUTE_VALIDATION)
    self.build_dataset(ROUTE_TEST)

def build_dataset(self, p_route):
    # Create dataset instance.
    # ......
    # ......

    self.dataset[p_route] = dataset
    self.iterators[p_route] = dataset.make_initializable_iterator()
    self.handles[p_route] = (self.iterators[p_route].string_handle()).eval()

def build_model(self):
    with tf.device("/GPU:0"):
        # Build dataset for training/validation/test.
        self.build_all_dataset()
        self.ph_dataset_handle = tf.placeholder(tf.string, shape=[])
        iterator = tf.data.Iterator.from_string_handle(self.ph_dataset_handle, self.dataset[ROUTE_TRAIN].output_types,
                                                       self.dataset[ROUTE_TRAIN].output_shapes)

        xxx, xxx, xxx = iterator.get_next()
        # Build the following graph.
        # ......
        # ......

while True:
    try:
        session.run(xxx, {self.ph_dataset_handle: self.handles[ROUTE_TRAIN]})
    except tf.errors.OutOfRangeError:
        break

例如,您创建Mocks(空对象,具有与创建它的类相同的功能和属性,但是除非您添加“ when”,否则什么都不做),并使用定义的“ when”,每次调用该对象的myMethod(),它将返回您在when()的thenReturn()中编写的内容。因此,每次为嘲笑AbstractService1调用myMethod()时,它将返回true,而嘲笑嘲笑的myMethod返回False。