如何使用JMockit模拟spring注入的类

Ran*_*ith 6 java junit spring jmockit mocking

我的代码:

class A extends X {
    @Autowired
    B b;

    @Override
    method() {
        //do something
        b.callMethodInB;
        //do something
    }

}

class B extends X {
    @Autowired
    C c;

    @Override
    method() {
        //do something
        c.callMethodInC;
       //do something
    }

}
Run Code Online (Sandbox Code Playgroud)

我需要测试method()A.那么如何模拟B.我正在使用Junit4和Jmockit.

Rog*_*rio 9

尝试这样的事情:

import org.junit.*;
import mockit.*;

public class ATest
{
    @Tested A a;
    @Injectable B b;

    @Test
    public void testMethod()
    {
        a.method();

        new Verifications() {{ b.callMethodInB(); }};
    }
}
Run Code Online (Sandbox Code Playgroud)

JMockit A使用注入的B实例(来自模拟字段b)自动实例化,将其设置a为测试类中的字段.这与使用的DI框架(Spring)无关.


Tom*_*mer 0

由于模拟框架通常依赖于 DI(依赖注入),这基本上意味着您需要在方法签名中传输模拟对象,我不确定这是否可能。

但看看这里,它可能会给你一个如何做的指导。