के साथ काम नहीं करता है मेरे पास एक डमी रिसोर्स क्लास और डमी टाइटेट फ़ाइल है, और एक टेस्ट क्लास टेस्टडमी रिसोर्स नीचे है, लेकिन मॉक ऑब्जेक्ट DummyResource dr = mock(DummyResource.class)
केवल तभी काम करता है जब मैं एक सामान्य श्रेणी के अंदर कन्स्ट्रक्टर को कॉल करता हूं , जब इसे किसी अज्ञात वर्ग में बुलाया जाता है, तो यह मॉक ऑब्जेक्ट का उपयोग करने के बजाय वास्तविक कन्स्ट्रक्टर को कॉल कर रहा है।कबूतर के माध्यम से पावरमॉक मॉकिंग कन्स्ट्रक्टर() अज्ञात वर्ग
संस्करण:
powermock 1.4.12 mockito 1.9.0 JUnit 4.8.2
DummyTarget.java:
import java.io.IOException;
import java.io.OutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.StreamingOutput;
public class DummyTarget {
public StreamingOutput testMocking() {
return new StreamingOutput() {
@Override
public void write(OutputStream arg0) throws IOException, WebApplicationException {
new DummyResource();
}
};
}
}
DummyResource.java:
package com.smin.dummy;
public class DummyResource {
public DummyResource() {
System.out.println("mock failure");
}
}
TestDummyResource.java:
package com.smin.dummy;
import static org.mockito.Mockito.mock;
import java.io.IOException;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.StreamingOutput;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({DummyResource.class,DummyTarget.class})
public class TestDummyResource {
@Before
public void setUp() throws Exception {
DummyResource dr = mock(DummyResource.class);
PowerMockito.whenNew(DummyResource.class).withNoArguments().thenReturn(dr);
}
@Test
public void testMocked() throws WebApplicationException, IOException {
new DummyResource(); // it uses the mocked object dr here,
//doesn't print "mock failure"
StreamingOutput sop = new DummyTarget().testMocking();
sop.write(null); // it calls DummyResource's constructor,
// prints ""mock failure"" here
}
}
तैयार करें सब कुछ फॉरटेस्ट को चलाने के लिए उम्र लगती है। – Shengjie
बिल्कुल सही, एपीआई को छोड़कर इस पोस्ट के बाद से बदल सकता है। '@PrepareForTest (पूरी तरह से योग्यता नाम =" com.smin.dummy। * ")' –
@Brian लिंक ** मृत ** –