Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TestableMock在使用时仍然会加载环境配置,如果有未mock的方法,在运行测试类时会真实执行 #82

Open
GodwinHub opened this issue Feb 7, 2021 · 4 comments
Labels
enhancement New feature or request

Comments

@GodwinHub
Copy link

如果存在未mock的方法,会在测试类执行时候真实的执行代码逻辑,有什么方法可以避免这种情况吗?在powermock中是依靠@PrepareForTest注解和@mock等注解配合实现的,但是在TestableMock中注解好像不适用

@linfan
Copy link
Collaborator

linfan commented Feb 7, 2021

目前没有实现这种功能。

两者实现思路不太一样,PowerMock是Mock被测类中的特定对象(以及对象中的所有方法),TestableMock是单独Mock被测类中的特定方法调用。从实现而言就是替换整个对象 vs 替换单个方法,这个差异使得TestableMock更加轻量,但无法做默认所有方法都是Mock这个功能,因为没有对象作为方法范围的边界。

理论上而言,TestableMock的机制能做到譬如“调用指定类型对象的所有方法默认换成Mock”的功能,近似于PowerMock的Mock对象。但这么做会使得Mock方法的生效逻辑变复杂,偏离简单易用的初衷。

@linfan linfan added the question Information about usage and others label Feb 7, 2021
@GodwinHub
Copy link
Author

目前没有实现这种功能。

两者实现思路不太一样,PowerMock是Mock被测类中的特定对象(以及对象中的所有方法),TestableMock是单独Mock被测类中的特定方法调用。从实现而言就是替换整个对象 vs 替换单个方法,这个差异使得TestableMock更加轻量,但无法做默认所有方法都是Mock这个功能,因为没有对象作为方法范围的边界。

理论上而言,TestableMock的机制能做到譬如“调用指定类型对象的所有方法默认换成Mock”的功能,近似于PowerMock的Mock对象。但这么做会使得Mock方法的生效逻辑变复杂,偏离简单易用的初衷。

那该如何避免由于没有mock替换个别方法,导致上线过程中执行测试用例影响而到真实数据呢?例如insert或者update类似会影响到数据库或是其他真实数据的操作

@linfan
Copy link
Collaborator

linfan commented Feb 8, 2021

对于明确是需要Mock某个对象的场景,Mockito、PowerMock的实现方式会更适合一些。

TestableMock也可以与Mockito共同使用,使用Mockito生成代理对象对象,作为Mock方法的返回值或是用于替换被测类中的成员对象。生成Mock对象方面的轮子在社区里已经比较多了,不太需要重新造。

单元测试通常应该在本地和测试环境运行,即使测试对象的方法全部是Mock的,也不建议连到线上环境跑测试,否则稍微疏忽就容易出大问题的。

@linfan linfan closed this as completed Feb 21, 2021
@linfan
Copy link
Collaborator

linfan commented Mar 18, 2021

近期连续收到较多类似问题的反馈🤣

计划在1.0版本之前会加上“调用指定类所有方法自动Mock”的新注解@MockAllMethods,相关设计已完成,待开发。

@linfan linfan added enhancement New feature or request and removed question Information about usage and others labels Mar 18, 2021
@linfan linfan reopened this Mar 18, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants