рдкреЙрд╡рд░рдореЙрдХ (+ рдореЙрдХрд┐рдЯреЛ) + рдЯреЗрд╕реНрдЯрдПрдирдЬреА рдФрд░ рдХреЙрд▓рд┐рдВрдЧ (рдореЙрдХ) рд╕реНрдЯреИрдЯрд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг

рдкрд╛рд╡рд░рдореЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдм рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓реЗрдЦ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ "рдЗрдХрд╛рдЗрдпреЛрдВ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреА рдХреЙрд▓ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рдФрд░ рд╕рдВрдХрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ, рдЬрдм рд╡рд░реНрдЧ рдХреЗ рдХреБрдЫ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЛ "рд╕реНрдЯрдм" рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдЖрд▓рд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердбреНрд╕ ( рдХрдорд┐рдЯ ) рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдореЛ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ:

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; /** Created by borz on 06.07.13. */ @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: "рдирд┐рдпрдорд┐рдд" рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рд╛ ред

Source: https://habr.com/ru/post/In185834/


All Articles