所以我的课是:
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构造函数包设为私有。有没有办法做到这一点?
答案 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
.....
}
}