alibaba / testable-mock

换种思路写Mock,让单元测试更简单
https://alibaba.github.io/testable-mock/
MIT License
1.83k stars 310 forks source link

不支持在Mock类通用方法里直接使用MOCK_CONTEXT,另外Debug其全程显示为null影响排错 #229

Open liranGG opened 3 years ago

liranGG commented 3 years ago
    @MockMethod(targetClass = CallB.class)
    public void callMe() {
        fault(TestableTool.MOCK_CONTEXT);
    }

    private void fault(Map mc) {
        mc.get("123");

        // 不支持直接使用,必须传进来,而且debug MOCK_CONTEXT全程为null,导致我排错困难
        // TestableTool.MOCK_CONTEXT.get("123")
    }

如上例子,mock的许多方法里有共性操作,我将其提炼成一个通用方法,在通用方法里无法直接使用MOCK_CONTEXT,必须将其传参才能使用,另外debug的时候MOCK_CONTEXT全程显示为null,影响了我排错,而将其传参之后确能显示有HashMap对象了。 请求可以在另外被调方法里可以直接使用MOCK_CONTEXT,且debug的时候能显示其有对象而不是一直全程为null。

linfan commented 3 years ago

MOCK_CONTEXT本质上是一个语法糖,会在运行期间被动态替换为一个存储在当前线程上下文里、由Testable负责维护的Map对象,它的内容会在每个测试用例开始执行前被清空。 在Debug的时候可以直接调用MockContextUtil.parameters()方法来获得这个上下文Map对象。在通用方法里也可以用这个方法替代MOCK_CONTEXT