sind Sie tun können, es mit Mockito und PowerMockito.
Sagen Sie bitte ClassUnderTest mit einem Konstruktor
public class ClassUnderTest {
String name;
boolean condition;
public ClassUnderTest(String name, boolean condition) {
this.name = name;
this.condition = condition;
init();
}
...
}
Und eine andere Klasse, die das Konstruktor
public class MyClass {
public MyClass() { }
public void createCUTInstance() {
// ...
ClassUnderTest cut = new ClassUnderTest("abc", true);
// ...
}
...
}
konnten wir bei der Testklasse ruft ...
(1) verwenden PowerMockRunner und beide Zielklassen in der obigen PrepareForTest Annotation zitieren:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ ClassUnderTest.class, MyClass.class })
public class TestClass {
(2) abfangen der Konstruktor ein Mockobjekt zurückzukehren:
@Before
public void setup() {
ClassUnderTest cutMock = Mockito.mock(ClassUnderTest.class);
PowerMockito.whenNew(ClassUnderTest.class)
.withArguments(Matchers.anyString(), Matchers.anyBoolean())
.thenReturn(cutMock);
}
(3) Validieren der Konstruktoraufruf:
@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);
}
Ähm, Sie können ein Objekt nicht erhalten, wenn Sie seinen Konstruktor nicht nennen; das ist eine Sprachfunktion. –
Bitte erläutern Sie, was Sie meinen – java123999
Sie sollten beschreiben, was Sie tatsächlich testen möchten, dass Sie glauben, Sie müssten einen Konstrukteur verspotten. Ich wäre nicht überrascht, wenn es keinen wirklichen Bedarf dafür gibt. –