Вы можете сделать это с Mockito и PowerMockito.
Скажем, у вас есть ClassUnderTest с конструктором
public class ClassUnderTest {
String name;
boolean condition;
public ClassUnderTest(String name, boolean condition) {
this.name = name;
this.condition = condition;
init();
}
...
}
И еще один класс, который вызывает этот конструктор
public class MyClass {
public MyClass() { }
public void createCUTInstance() {
// ...
ClassUnderTest cut = new ClassUnderTest("abc", true);
// ...
}
...
}
В классе Test мы могли бы ...
(1) использовать PowerMockRunner и ссылаются как целевые классы выше в PrepareForTest аннотации:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ ClassUnderTest.class, MyClass.class })
public class TestClass {
(2) перехватывают конструктора, чтобы вернуть макет объекта:
@Before
public void setup() {
ClassUnderTest cutMock = Mockito.mock(ClassUnderTest.class);
PowerMockito.whenNew(ClassUnderTest.class)
.withArguments(Matchers.anyString(), Matchers.anyBoolean())
.thenReturn(cutMock);
}
(3) Подтвердить вызов конструктора:
@Test
public void testMethod() {
// prepare
MyClasss myClass = new MyClass();
// execute
myClass.createCUTInstance();
// checks if the constructor has been called once and with the expected argument values:
String name = "abc";
String condition = true;
PowerMockito.verifyNew(ClassUnderTest.class).withArguments(name, condition);
}
Ум, вы не можете получить объект, если вы его не называете его конструктором; это языковая функция. –
, пожалуйста, объясните, что вы имеете в виду. – java123999
Вы должны описать, что именно вы пытаетесь протестировать, что заставило вас подумать, что вам нужно высмеять конструктор. Я не удивлюсь, если в этом нет никакой реальной необходимости. –