如何在带有私有构造函数的类中测试此静态成员?

时间:2020-05-19 20:06:25

标签: java junit

所以我的课是:

public final class MyClass {

    private static MyObject myObject;

    public static void setMyObject(MyObject myObject) {
        MyClass.myObject = myObject;
    }

    private MyClass(MyObject myObject){
        setMyObject(myObject);
    }

    public static Optional<Object2> getObject2(params) {
        Optional<Object2> object2 =  myObject.execute(params);
        return object2;
    }

我正在尝试与Junit进行测试

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {

    @Mock
    private MyObject myObject;

    private MyClass myClass;

    @Before
    public void initialize() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test1() {
        Mockito.doReturn(Optional.empty()).when(myObject).executeQueryWithArgument(any);
        myclass = new Myclass(myObject);

    }
}
        myclass = new Myclass(myObject);

此行失败,并说将MyClass构造函数包设为私有。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

使用set方法将模拟的myObject添加到MyClass并编写测试,如下所示:

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {

    @Mock
    private MyObject myObject;

    private MyClass myClass;

    @Before
    public void setUp() {
        MyClass.setMyObject(myObject);
    }

    @Test
    public void shouldDoSomething() {
        // Arrange
        Mockito.doReturn(Optional.empty()).when(myObject).executeQueryWithArgument(any);

       // Act
        Optional<Object2> actual = myClass.getObject2(.....);

       // Assert
       .....
    }
}