рдкрд╛рд╡рд░рдореЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдм рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ
рд▓реЗрдЦ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ "рдЗрдХрд╛рдЗрдпреЛрдВ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреА рдХреЙрд▓ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рдФрд░ рд╕рдВрдХрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ, рдЬрдм рд╡рд░реНрдЧ рдХреЗ рдХреБрдЫ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЛ "рд╕реНрдЯрдм" рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдЖрд▓рд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердбреНрд╕ (
рдХрдорд┐рдЯ ) рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдореЛ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ:
public class ClassStatic { static String getValue() { return "value"; } static String getValue(final String s) { return getValue() + s; } }
рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ClassStaticTest (
рдХрдорд┐рдЯ ) рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ:
import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @Test(groups = {"static", "noMock"}) public class ClassStaticTest { @DataProvider public Object[][] data() throws Exception { return new Object[][]{{"", "value"}, {"test", "valuetest"}}; } @Test public void testGetValueVoid() throws Exception { Assert.assertEquals(ClassStatic.getValue(), "value"); } @Test(dataProvider = "data", dependsOnMethods = {"testGetValueVoid"}) public void testGetValueAttribute(final String v, final String r) throws Exception { Assert.assertEquals(ClassStatic.getValue(v), r); } }
рдЗрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдордиреЗ рдХрднреА рднреА рдкреЙрд╡рд░рдореЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдЕрдм, рд╕реНрдЯреИрдЯрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП "рд╕реНрдЯрдм" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреА "рдмреИрдХрдмреЛрди" рдмрдирд╛рдПрдВ:
import org.powermock.modules.testng.PowerMockObjectFactory; import org.testng.IObjectFactory; import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test; @Test(groups = {"static", "mock"}) public class ClassStaticMockTest { @ObjectFactory public IObjectFactory setObjectFactory() { return new PowerMockObjectFactory(); } }
рд╣рдордиреЗ ClassStaticMockTest рдХреНрд▓рд╛рд╕ рдмрдирд╛рдИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ TestNG (
рдкреНрд░рд▓реЗрдЦрди ) рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдлреИрдХреНрдЯреНрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред
рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдм рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ:
import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockObjectFactory; import org.testng.Assert; import org.testng.IObjectFactory; import org.testng.annotations.DataProvider; import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test; import static org.mockito.MockitoAnnotations.Mock; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; @Test(groups = {"static", "mock"}) @PrepareForTest({ClassStatic.class}) public class ClassStaticMockTest { @Mock public ClassStatic classStatic; @DataProvider public Object[][] data() throws Exception { return new Object[][]{{"", "newValue"}, {"test", "newValuetest"}}; } @ObjectFactory public IObjectFactory setObjectFactory() { return new PowerMockObjectFactory(); } @Test(dependsOnGroups = {"noMock"}) public void mockGetValueVoid() throws Exception { mockStatic(ClassStatic.class); when(ClassStatic.getValue()).thenReturn("newValue"); Assert.assertEquals(ClassStatic.getValue(), "newValue"); } }
рдПрдХ рдЕрдВрддрд┐рдо "рдХреЙрд░реНрдб" рдерд╛ - рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдЯреЗрд╕реНрдЯ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХреА рдХреЙрд▓ "рд╕реНрдЯрдм" рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рд╣реЛрддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (
рдХрдорд┐рдЯ ):
import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockObjectFactory; import org.testng.Assert; import org.testng.IObjectFactory; import org.testng.annotations.DataProvider; import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test; import static org.mockito.MockitoAnnotations.Mock; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; @Test(groups = {"static", "mock"}) @PrepareForTest({ClassStatic.class}) public class ClassStaticMockTest { @Mock public ClassStatic classStatic; @DataProvider public Object[][] data() throws Exception { return new Object[][]{{"", "newValue"}, {"test", "newValuetest"}}; } @ObjectFactory public IObjectFactory setObjectFactory() { return new PowerMockObjectFactory(); } @Test(dependsOnGroups = {"noMock"}) public void mockGetValueVoid() throws Exception { mockStatic(ClassStatic.class); when(ClassStatic.getValue()).thenReturn("newValue"); Assert.assertEquals(ClassStatic.getValue(), "newValue"); } @Test(dataProvider = "data", dependsOnMethods = {"mockGetValueVoid"}) public void testGetValueAttribute(final String v, final String r) throws Exception { mockStatic(ClassStatic.class); when(ClassStatic.getValue()).thenReturn("newValue"); when(ClassStatic.getValue(v)).thenCallRealMethod(); Assert.assertEquals(ClassStatic.getValue(v), r); } }
рд╣рдо
getValue()
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм
getValue(String value)
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реАрдХрд╛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
getValue()
рдХреЛ рдЕрдкрдиреЗ рдЕрдВрджрд░ рдмреБрд▓рд╛рддрд╛ рд╣реИред
рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ / рд╡рд┐рдзрд┐рдпреЛрдВ (
рдХрдорд┐рдЯ ) рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп "рд╕реНрдЯрдмреНрд╕" рдХреЗ рд╕рд╛рде рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ "рд╕реНрдЯреИрдореНрдкрд┐рдВрдЧ" рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ "рдЬреАрд╡рд┐рдд" рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд╣ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
ClassStatic.getValue()
:
public class ClassUseStatic { public String getValue() { return ClassStatic.getValue() + "noStatic"; } }
рдФрд░ рд╣рдо
ClassUseStatic.getValue()
рдХреЛ рдХреЙрд▓ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде
ClassUseStatic.getValue()
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockObjectFactory; import org.testng.Assert; import org.testng.IObjectFactory; import org.testng.annotations.DataProvider; import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test; import static org.mockito.MockitoAnnotations.Mock; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; @Test(groups = {"useStatic", "mock"}, dependsOnGroups = {"static"}) @PrepareForTest({ClassStatic.class}) public class ClassUseStaticTest { @Mock public ClassStatic classStatic; @DataProvider public Object[][] data() throws Exception { return new Object[][]{{"newValue1", "newValue1noStatic"}, {"newValue2", "newValue2noStatic"}}; } @ObjectFactory public IObjectFactory setObjectFactory() { return new PowerMockObjectFactory(); } @Test(dataProvider = "data") public void testGetValue(String value, String result) throws Exception { mockStatic(ClassStatic.class); when(ClassStatic.getValue()).thenReturn(value); ClassUseStatic testClass = new ClassUseStatic(); Assert.assertEquals(result, testClass.getValue()); } }
рдкреБрдирд╢реНрдЪ: рд╕рднреА рдЙрджрд╛рд╣рд░рдг
GitHub рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
UPD: "рдирд┐рдпрдорд┐рдд" рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдЬреЛрдбрд╝рд╛ ред