【问题标题】:Mocking multiple Vector<String> with @Spy and @InjectMocks使用 @Spy 和 @InjectMocks 模拟多个 Vector<String>
【发布时间】:2018-04-16 19:10:08
【问题描述】:

我正在编写一个 JUnit 测试,我需要在其中注入 2 个向量的模拟,如下所示:

@AllArgsConstructor
public abstract class AbstractMyObject {  
    @Autowired
    private Vector<String> firstVector;

    @Autowired
    private Vector<String> secondVector;

    public abstract void  absFunc();

    public void doThis() {
        System.out.println(firstVector);
        System.out.println(secondVector);
    }
}

@Component
public class MyObject extends AbstractMyObject {
    public MyObject(final Vector<String> firstVector, final Vector<String> secondVector) {
        super(firstVector, secondVector);
    }
    @Override
    public void absFunc() {

    }
}

public class TestClass {
    private static String[] array1 = {"Hello", "World"};
    private static String[] array2 = {"junit", "mockito"};

    @Spy
    private Vector<String> firstVector = new Vector<>(Arrays.asList(array1));

    @Spy
    private Vector<String> secondVector = new Vector<>(Arrays.asList(array2));

    @InjectMocks
    private MyObject myObject;

    private void initMocks() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test1() {
        initMocks();
        myObject.doThis();
    }
}

运行这个测试的输出是:[Hello, World]

如何确保正确分配两个向量?

我找不到任何关于将 @Qualifier 与 Spy 和 InjectMocks 一起使用的示例或文档。

【问题讨论】:

  • 你说的是什么意思,这样注入框架才不会混淆?是否有一些具体问题需要解决。请澄清。
  • 我看到,在注入间谍时的单元测试中,它们包含相同的值,即 array2。即模拟 MyObject 包含 2 个向量,均初始化为 array2。
  • 请显示您正在观察此问题的测试代码。
  • 我已经用所需的类更新了代码。我看到当所讨论的类是抽象类的派生类时会发生这种情况。

标签: spring junit dependency-injection mockito spy


【解决方案1】:

我从不正确的基类调用 super()。由于成员是@Autowire-d,因此不需要 super()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2016-07-05
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多