【问题标题】:junit nested mock injections for characterization tests用于表征测试的 junit 嵌套模拟注入
【发布时间】:2021-03-02 22:53:33
【问题描述】:

我需要能够模拟使用 JUnit 注入的嵌套类,以便创建特征测试。问题是:

类 1 使用类 2 的对象,类 2 使用类 3 的对象。在类 1 方法上运行测试时,类 3 对象为空

这是我的类结构:

class 1 {
    @Inject private Class2  class2 ;
}

class 2 {
    @Inject private Class3  class3 ;
}

我的测试套件需要自上而下运行才能全面测试我的系统,因为它是一个旧系统,我需要从头开始编写测试以逐步重构它。

测试套件:

@RunWith(MockitoJUnitRunner.class)
public class Class1Test {
    @Mock
    Class3 class3;//this doesn't work object remains null inside of mocked class2

    @Mock
    Class2 class2; //this injection works and the object isn't null inside of class1

    @InjectMocks
    public Class1 class1;

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }
    @Test 
public void testFunction()
{
assertNotNull(class1.exampleFunction());
}

}

我知道正确的方法是存根依赖项,但是这个代码库太大而无法为每一层编写单元测试,我需要能够在 JUnit 中编写测试,这样我就可以在重构时运行这些测试代码库,以确保我没有破坏任何东西,因此我没有使用邮递员,因为我需要它快。

在 Java 8 上 @inject 是一个java注解 使用 JUnit 4,但我认为如果需要我可以使用 junit5。 该项目是一个 j2ee (java ee) 应用程序

【问题讨论】:

    标签: java testing jakarta-ee junit integration-testing


    【解决方案1】:

    如果我正确理解了这个问题,那么类 1 正在使用类 2 的对象,类 2 正在使用类 1 的对象。在类 1 方法上运行测试时,类 3 对象为空。

    您可以对第 2 类使用深度存根。

    @Mock(answers=Answers.RETURNS_DEEP_STUBS)
    Class class2; 
    

    【讨论】:

    • 不,实际上:类 1 使用类 2 的对象,类 2 使用类 3 的对象。当测试在类 1 方法上运行时,类 3 对象为空跨度>
    • 是的。深度存根将在这里工作。试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多