繁体   English   中英

如何在JMockit中部分模拟依赖项抽象对象

[英]How to partially mock a dependency abstract object in JMockit

我有抽象类D ,它是经过测试的类T的依赖项。

测试班:

public class T_Test {
    @Tested T tested;

    D dependency;

    public void test() {
        dependency.doSomething();
        tested.testedMethod(dependency);
    }
}

我希望dependency.doSomething()将运行此方法的实际代码,但是抽象方法将被模拟。

  1. 如果按原样运行测试,则显然会因为使用未初始化的dependency收到NullPointerException

  2. 如果我添加@Mocked注释到D dependency线,在所有的方法D被嘲笑,所以d.doSomething()不会做它应该做的。

  3. 如果我保留@Mocked批注并在测试方法的开头添加一个空的NonStrictExpectations块,则可以进行部分模拟,如下所示:

     new NonStrictExpectations(D.class) {}; 

    或像这样:

     new NonStrictExpectations(d) {}; 

    我得到java.lang.IllegalArgumentException: Already mocked: class D

  4. 如果我保留NonStrictExpectations块并删除@Mocked批注,则再次会因使用未初始化的dependency得到NullPointerException

那么,如何部分模拟该依赖抽象类呢?

在依赖项上使用@Capturing批注可实现此目的。 无需添加空的期望值块; 仅抽象方法将被模拟。

public class T_Test {
    @Tested T tested;

    @Capturing D dependency;

    public void test() {
        dependency.doSomething();
        tested.testedMethod(dependency);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM