java - 单元测试调用Java中私有(private)方法和其他对象的公共(public)方法

标签 java unit-testing junit mockito

我是单元测试新手,最近尝试了 JUnit 测试和 Mockito。

我正在尝试对一个调用多个私有(private)方法并创建其他类的私有(private)对象的方法进行单元测试。

如何对该方法进行单元测试。

例如,如果我有以下代码:

class ClassToTest {
    private OuterClass outerClass;
    public Boolean function() {
        outerClass = new OuterClass(20);
        return innerFunction(outerClass.getValue());
    }

    private Boolean innerFunction(int val) {
        if (val % 2 == 0)
            return true;
        return false;
    }
}

我很困惑如何测试公共(public)功能。

最佳答案

方法如何实现并不重要;该方法应该有一个它遵守的契约,并且就是您通过测试验证的内容。在此示例中,如果 outerClass 的值为偶数,则 function() 应返回 true。实现此目的的一种方法是注入(inject)(传递到 ClassToTest 构造函数中)outerClass 的实例,以便您可以在测试时控制该值:

@Test
public void trueWhenEven() {
    var outer = new OuterClass(2);
    var ctt = new ClassToTest(outer);
    assertTrue(ctt.function());
}

有时契约只是一个方法调用某些其他对象上的方法;在这种情况下,您可以使用 Mockito 或类似的库来验证交互。

关于java - 单元测试调用Java中私有(private)方法和其他对象的公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54954550/

相关文章:

c# - 具有 Equals 和 GetHashCode 辅助方法的库,适用于 .NET

ruby-on-rails - 我应该测试模型之间的关联吗?

android - 如何测试一个 Android 库项目

java - 如何用hibernate指向其他表的ID?

java - 在Windows中运行脚本后,模拟器需要自动关闭

unit-testing - 数据驱动单元测试

.net - 我们将理论属性用于什么?

java - 在 Junit/Mockito 中为文件 uploader 编写单元测试

java - Android Studio 中的 Junit

java - 匿名类的多重继承