代理对象的mock

demo类定义如下:

public class Handler implements InvocationHandler {
    private SetBeanBInterface setBeanB;

    public Handler(SetBeanBInterface b) {
        this.setBeanB = b;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("0000000");
        return method.invoke(setBeanB, args);
    }
}
@Service
public class SetBeanA implements SetBeanAInterface {
    private SetBeanBInterface setBeanB; // 实际值是setSetBeanB里设置的代理对象

    @Override
    public void ffun() {
        System.out.println(setBeanB.fun());
    }

    @Autowired
    public void setSetBeanB(SetBeanBInterface setBeanB) {
        this.setBeanB = (SetBeanBInterface) Proxy.newProxyInstance(setBeanB.getClass().getClassLoader(),
                setBeanB.getClass().getInterfaces(), new Handler(setBeanB));
    }
}
public interface SetBeanBInterface {
    String fun();
}
@Service
public class SetBeanB implements SetBeanBInterface {
    @Override
    public String fun() {
        return "12345";
    }
}
// testng + @Mock + @InjectMocks
@SpringBootTest // 启动完整 SpringBoot 应用上下文
public class SetBeanTest extends AbstractTestNGSpringContextTests {


    @BeforeClass // 这里和 @TestExecutionListeners(MockitoTestExecutionListener.class) 二选一即可
    public void init() {
        MockitoAnnotations.openMocks(this);
    }

    @InjectMocks
    private SetBeanA setBeanA;

    @Mock
    private SetBeanBInterface setBeanBInterface;

    @Test
    public void test1() {
        // 设置 mockB 的行为
        when(setBeanBInterface.fun()).thenReturn("mocked result");
        setBeanA.ffun();
    }
}

测试类

// testng + @Mock + @InjectMocks
@SpringBootTest // 启动完整 SpringBoot 应用上下文
public class SetBeanTest extends AbstractTestNGSpringContextTests {


    @BeforeClass // 这里和 @TestExecutionListeners(MockitoTestExecutionListener.class) 二选一即可
    public void init() {
        MockitoAnnotations.openMocks(this);
    }

    @InjectMocks
    private SetBeanA setBeanA;

    @Mock
    private SetBeanBInterface setBeanBInterface;

    @Test
    public void test1() {
        // 设置 mockB 的行为
        when(setBeanBInterface.fun()).thenReturn("mocked result");
        setBeanA.ffun();
    }
}

输出:0000000 (表示走进了代理逻辑)

           mocked result (表示被代理的对象被mock成功了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值