6

我的代码:

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
    }

}

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

4

2 回答 2

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(); }};
    }
}

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

于 2012-07-02T14:08:31.853 回答
0

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

但是看看这里,它可能会给你一个关于如何做的方向。

于 2012-06-28T10:59:12.040 回答