Open 1528110566 opened 2 years ago
如果对mapper中的方法的 调用 是发生在AServiceImpl
类里的,那么直接在AServiceImplTest.Mock
类型里定义与目标调用相同前面的Mock方法应该会生效。
但如果实际 调用 的代码是写在抽象父类AbstractService
中的,这种场景属于TestableMock支持得不太好的一种情况,就是被Mock的逻辑不在被测类里,此时需要额外创建一个与父类AbstractService
绑定的Mock类型AbstractServiceMock
,放在测试目录与AbstractService
类相同的包路径下面,然后在AbstractServiceMock
里定义相应的Mock方法。
如果对mapper中的方法的 调用 是发生在
AServiceImpl
类里的,那么直接在AServiceImplTest.Mock
类型里定义与目标调用相同前面的Mock方法应该会生效。但如果实际 调用 的代码是写在抽象父类
AbstractService
中的,这种场景属于TestableMock支持得不太好的一种情况,就是被Mock的逻辑不在被测类里,此时需要额外创建一个与父类AbstractService
绑定的Mock类型AbstractServiceMock
,放在测试目录与AbstractService
类相同的包路径下面,然后在AbstractServiceMock
里定义相应的Mock方法。
好的,多谢回复。如果后续TestableMock
能支持这种内部调用的场景那真是极好的。
我遇到需要mock 泛型出入参的抽象父类方法的情况(类似RedisTemplate<K, V>),通过创建AbstractServiceMock也不好处理。 最后反向在子类中添加了需要mock的方法的具体实现(内容为直接return super.***();),然后只需要mock这个子类的方法就可以了。
我遇到需要mock 泛型出入参的抽象父类方法的情况(类似RedisTemplate<K, V>),通过创建AbstractServiceMock也不好处理。 最后反向在子类中添加了需要mock的方法的具体实现(内容为直接return super.***();),然后只需要mock这个子类的方法就可以了。
改原码了不太好
增删改查太多,把常用的处理逻辑写在了抽象父类。 场景是这样,AServiceImpl实现了AService接口,继承了AbstractService抽象类,AServiceImpl部分方法直接super调用。 AbstractService通过AServiceImpl重写的getMapper方法获得相应mapper的引用,然后调用mapper的相关方法。 我在测试AServiceImpl相关方法的时候,尝试mock mapper的相关方法,但是不起作用,而且日志里也没有打印抽象类内部的调用链路。请问是我的操作有问题吗?