Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JMockit.pdf
Search
Takahiro Shigemoto
May 21, 2015
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JMockit.pdf
Takahiro Shigemoto
May 21, 2015
More Decks by Takahiro Shigemoto
See All by Takahiro Shigemoto
HornetQ勉強会(超入門編)
taka2
0
2.1k
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
7.2k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
550
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
600
Six Lessons from altMBA
skipperchong
29
4.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Embracing the Ebb and Flow
colly
88
5.2k
Transcript
+.PDLJUษڧձ 5BLBIJSP4IJHFNPUP
+.PDLJUษڧձ ࣍ w ϞοΫϥΠϒϥϦΛ͏ཧ༝ w +.PDLJUΛ͏ཧ༝ w +.PDLJU͕ఏڙ͢Δ"1* w ϏϔΠϏΞۦಈ։ൃςετ
w ঢ়ଶϕʔεͷςετ w ελϒɺϑΣΠΫɺϞοΫɺεύΠ w έʔεผϞοΫͷར༻ํ๏ w TUBUJDϝιουͷϞοΫ w QSJWBUFϝιουͷϞοΫ w ίϯετϥΫλͷϞοΫ w ҾʹԠͨ͡ϞοΫಈ࡞ͷมߋ w ݺͼग़͠ճʹԠͨ͡ϞοΫಈ࡞ͷมߋ w ෦ϞοΫ w ࢀߟαΠτ
+.PDLJUษڧձ ϞοΫϥΠϒϥϦΛ͏ཧ༝ʢ̍ʣ w ϞοΫΛΘͣʹɺςετΫϥεʢ5FTU$BTFʣ͔ ΒςετରΫϥεΛݺͿͱɺςετରΫϥεͩ ͚Ͱͳ͘ɺґଘΫϥεʢ্هͷґଘΫϥε̍ɺґଘ Ϋϥε̎ʣςετ͢Δ͜ͱʹͳΔɻ ςετ Ϋϥε ςετ
ରΫϥε ґଘ Ϋϥε̍ ґଘ Ϋϥε̎ ςετ ൣғ
+.PDLJUษڧձ ϞοΫϥΠϒϥϦΛ͏ཧ༝ʢ̎ʣ w ґଘΫϥεΛϞοΫԽ͢Δ͜ͱͰʢґଘΫϥεຊདྷ ͷಈ࡞Ͱͳ͘ɺࢦఆͨ͠ৼΔ͍Λͤ͞Δ͜ͱ ͰʣɺςετൣғΛςετରΫϥεʹߜΔ͜ͱ͕ Ͱ͖ΔɻʢςετରΫϥεͷιʔεมߋ͠ͳ͍ʣ ςετ Ϋϥε ςετ
ରΫϥε ϞοΫԽ ґଘΫϥε̍ ϞοΫԽ ґଘΫϥε̎ ςετ ൣғ
+.PDLJUษڧձ ϞοΫϥΠϒϥϦΛ͏ཧ༝ʢ̏ʣ w 99-PHJDͷςετ͢ΔͨΊʹɺ%#ͷσʔλ༻ҙ͠ ͨΓɺ֎෦γεςϜͷηοτΞοϓΛ͠ͳ͚Εͳ Βͳ͍ɻ ςετͷ࣮ߦ͕͘ͳͬͨΓɺςετ͕ෆ҆ఆʹͳͬ ͨΓɺฒྻ࣮ߦΛ͛ͨΓ͢Δɻ ˠϞοΫԽ͢Δ͜ͱͰղܾʂ 99-PHJD5FTU
99-PHJD 99%BP 994FSWJDF %# ֎෦γεςϜ
+.PDLJUษڧձ +.PDLJUΛ͏ཧ༝ʢ̍ʣ w ैདྷͷϞοΫϥΠϒϥϦͷ w ͜Ε·ͰͷϞοΫϥΠϒϥϦʢ&BTZ.PDLɺK.PDLɺ .PDLJUPɺ6OJUJMT.PDLͳͲʣͰɺҎԼͷͷΛϞο ΫͰ͖ͳ͔͕ͬͨɺ+.PDLJUͰग़དྷΔΑ͏ʹͳͬͨɻ w QSJWBUFpOBMTUBUJDϝιου
w ςετରΫϥε͔ΒɺOFXͰੜͨ͠ґଘΫϥε w ͔͠͠ɺ1PXFS.PDLʴʢ&BTZ.PDLc.PDLJUPʣͰग़ དྷΔΑ͏ʹͳͬͨɻ w ˠػೳͷ๛͞ͱ୯ҰKBSͰग़དྷΔ؆ܿ͞ʹɺ+.PDLJU ͷ༏Ґੑ͕͋Δ͔ɻ
+.PDLJUษڧձ +.PDLJUΛ͏ཧ༝ʢ̎ʣ w +.PDLJUαΠτ.PDLJOH5PPMLJU$PNQBSJTPO.BUSJYΑΓ
+.PDLJUษڧձ +.PDLJU͕ఏڙ͢Δ"1* w +.PDLJUೋͭͷϞοΫ"1*Λఏڙ͢Δɻ w ̍ɽ&YQFDUBUJPOT"1* w #%%ʢϏϔΠϏΞۦಈ։ൃʣςετ༻ w ςετରΦϒδΣΫτͷৼΔ͍ʢϝιουʣ
Λςετ w ̎ɽ.PDLVQT"1* w ঢ়ଶϕʔεςετͱϑΣΠΫ࣮༻ w େͷέʔε&YQFDUBUJPOT"1*Ͱॻ͘͜ͱ͕ग़དྷΔ͕ɺ .PDLVQT"1*Ͱิ͢Δඞཁ͕͋Δέʔε͋Δɻ
+.PDLJUษڧձ ϏϔΠϏΞۦಈ։ൃςετʢ̍ʣ w ϏϔΠϏΞۦಈ։ൃςετɺҎԼͷϑΣʔζͰ࣮ߦ͞Ε Δɻ w ४උ "SSBOHF ʗ࣮ߦ "DU
ʗݕূ "TTFSU Λ ʢظ͢ΔґଘΫϥεͷৼΔ͍ͷʣهʗϦϓϨΠʗݕ ূͱݴ͏ɻ @Test public void someTestMethod() { // 1. ४උɿςετରΫϥεΛ࣮ߦՄೳʹ͢ΔͷʹඞཁͳԿ͔ɻ ... // 2. ࣮ߦɿ௨ৗɺpublicϝιουΛݺͿࣄʹΑͬͯɺςετରΫϥε͕࣮ߦ͞ΕΔɻ ... // 3. ݕূɿςετରΫϥε͕࣮ߦͨ͜͠ͱΛ֬ೝ͢ΔͨΊʹɺνΣοΫ͢Δඞཁͷ͋ΔԿ͔ɻ ... }
+.PDLJUษڧձ ϏϔΠϏΞۦಈ։ൃςετʢ̎ʣ w ϏϔΠϏΞۦಈ։ൃςετͷྫ public class XXDao { public String
getXX() { return "XX"; } } public class XXLogic { public String getXX() { XXDao dao = new XXDao(); return dao.getXX(); } } 99-PHJD 99%BP 99-PHJD 99%BPʹґଘ
+.PDLJUษڧձ ϏϔΠϏΞۦಈ։ൃςετʢ̏ʣ w ϏϔΠϏΞۦಈ։ൃςετͷྫ @Test public void testGetXX(@Mocked XXDao dao)
{ // هϑΣʔζ String expectedResult = "YY"; new Expectations() {{ dao.getXX(); result = expectedResult; }}; // ϦϓϨΠϑΣʔζ XXLogic logic = new XXLogic(); String result = logic.getXX(); // ݕূϑΣʔζ new Verifications() {{ // dao#getXX()1ճ͚ͩݺΕͨ dao.getXX(); minTimes = 1; maxTimes = 1; }}; assertThat(result, is(expectedResult)); } ͜ͷςετέʔεͷൣғͰ༗ ޮͳϞοΫΦϒδΣΫτ ʻهϑΣʔζʼ ґଘΫϥε99%BPͷɺ͜ͷς ετʹ͓͚Δ·͍͠ৼΔ͍ Λه ʻϦϓϨΠϑΣʔζʼ ςετରΫϥεͷQVCMJDϝ ιουΛݺͼग़࣮ͯ͠ߦ͢Δ ʻݕূϑΣʔζʼ ҎԼೋΛ֬ೝ͢Δɻ ɾϞοΫΦϒδΣΫτʢґଘΫ ϥεʣ͕ظ௨Γಈ࡞͔ͨ͠ ɾςετରΫϥε͕ظ௨Γ ͷ݁ՌΛฦ͔ͨ͠
+.PDLJUษڧձ ঢ়ଶϕʔεςετʢ̍ʣ w ঢ়ଶϕʔεςετɺςετରΫϥεͱґଘؔ ͷΓͱΓͰͳ͘ɺґଘ͔ؔΒฦ͞ΕΔσʔλ ʹணͨ͠ςετɻ ʢঢ়ଶભҠΛཏ͢Δςετͷ͜ͱͰͳ͍Β͍͠ʣ ςετ Ϋϥε ςετ
ରΫϥε ϞοΫԽ ґଘΫϥε̍ ϞοΫԽ ґଘΫϥε̎ ґଘΫϥεʹ͞Ε ΔύϥϝʔλΓ ʹ͢Δςετ
+.PDLJUษڧձ ঢ়ଶϕʔεςετʢ̎ʣ w ঢ়ଶϕʔεςετͷྫ import java.io.IOException; import java.net.Socket; public class
SocketClient { public Socket connect(String host, int port) throws IOException { Socket s = new Socket(host, port); return s; } } 4PDLFU $MJFOU 4PDLFU 4PDLFU$MJFOU 4PDLFUʹґଘ
+.PDLJUษڧձ ঢ়ଶϕʔεςετʢ̏ʣ w ঢ়ଶϕʔεςετͷྫ @Test public void testConnect() { //
هϑΣʔζ String expectedHost = "test.example.com"; int expectedPort = 1234; new MockUp<Socket>() { @Mock void $init(String host, int port) { assertThat(host, is(expectedHost)); assertThat(port, is(expectedPort)); } }; // ϦϓϨΠϑΣʔζ try { Socket s = new SocketClient().connect(expectedHost, expectedPort); } catch(IOException e) { fail(e.getMessage()); } } ϞοΫΦϒδΣΫτʢґଘΫ ϥεʀ4PDLFUʣʹਖ਼͍͠ύϥ ϝʔλ͕͞Ε͔ͨݕূ͢Δ .PDLVQT"1*ͷ߹ɺ .PDL6QΫϥεΛOFXͨ͠ͱ͜ ΖͰϞοΫ͕༗ޮʹͳΔ
+.PDLJUษڧձ ελϒɺϑΣΠΫɺϞοΫɺεύΠʢ̍ʣ w ૯শͯ͠ςετμϒϧͱ͍͏ɻ IUUQKBXJLJQFEJBPSHXJLJςετμϒϧ આ໌ ελϒ ςετରʹʮؒతͳೖྗʯΛఏڙ͢ΔͨΊʹ͏ ˠఆΛฦ͢ͳͲɺݺͼग़͠ݩʹԠͨ͡୯७ͳ࣮Λఏڙ͢Δ ϑΣΠΫ
࣮ࡍͷΦϒδΣΫτʹ͍ۙಇ͖Λ͢Δ͕ɺΑΓ୯७ͳ࣮Λ͏ ࣮ࡍͷσʔλϕʔεΛஔ͖͑ΔΠϯϝϞϦσʔλϕʔεͳͲ ˠελϒͷҰछ͕ͩɺΑΓߴͳʢͨͩ͠ຊ൪ίʔυΑΓ୯७ͳʣ࣮Λఏڙ͢Δ ϞοΫ ςετର͔Βͷʮؒతͳग़ྗʯΛݕূ͢ΔͨΊʹ͏ ςετίʔυͷ࣮ߦલʹɺ͋Β͔͡Ίظ͢Δ݁ՌΛઃఆ͓ͯ͘͠ ˠελϒͷҰछ͕ͩɺݺͼग़͠ݩ͕ਖ਼͘͠ԼҐϞδϡʔϧΛར༻͍ͯ͠Δ͜ͱΛݕূ͢Δ εύΠ ςετର͔Βͷʮؒతͳग़ྗʯΛݕূ͢ΔͨΊʹ͏ ग़ྗΛه͓ͯ͘͜͠ͱͰɺςετίʔυͷ࣮ߦޙʹɺΛऔΓग़ͯ͠ݕূͰ͖Δ ˠݺͼग़͠ݩͱԼҐϞδϡʔϧͷؒʹೖͬͯɺΛऔಘ͠ɺݕূ͢Δ
+.PDLJUษڧձ ελϒɺϑΣΠΫɺϞοΫɺεύΠʢ̎ʣ w ϑΣΠΫͷྫ @Test public void testConnectFail(@Mocked Socket socket)
throws IOException { // هϑΣʔζ String expectedHost = "test.example.com"; int expectedPort = 1234; new Expectations() {{ new Socket(anyString, anyInt); result = new IOException("mockedConstructor"); }}; // ϦϓϨΠϑΣʔζ try { Socket s = new SocketClient().connect(expectedHost, expectedPort); fail(); } catch(IOException e) { // ྫ֎͕εϩʔ͞ΕΔ͜ͱΛظ } } 4PDLFUଓΤϥʔ͕ى͜ΔΑ ͏ɺϞοΫʢϑΣΠΫʣΛઃఆ ͢Δ
+.PDLJUษڧձ ελϒɺϑΣΠΫɺϞοΫɺεύΠʢ̏ʣ w εύΠͷྫ @Test public void testConnectSpy() { //
هϑΣʔζ String expectedHost = "www.yahoo.co.jp"; int expectedPort = 80; new MockUp<Socket>() { @Mock void close(Invocation invocation) throws IOException { // ҾΛίϯιʔϧʹग़ྗ System.out.println("close method invoked."); // ຊͷϝιουΛݺͿ invocation.proceed(); } }; // ϦϓϨΠϑΣʔζ try { Socket s = new SocketClient().connect(expectedHost, expectedPort); s.close(); } catch(IOException e) { fail(); DMPTFϝιου͕ݺΕͨͱ͖ ʹɺίϯιʔϧʹϝοηʔδΛग़ ͯ͠ɺຊͷϝιουΛݺͿɻ
+.PDLJUษڧձ έʔεผ ϞοΫͷར༻ํ๏
+.PDLJUษڧձ TUBUJDϝιουͷϞοΫ w ςετରΫϥε w ςετΫϥε @Test public void testStaticMethod(@Mocked
StaticMethod staticMethod) { // هϑΣʔζ String expectedResult = "mockedResult"; new Expectations() {{ StaticMethod.staticMethod(); result = expectedResult; }}; // ϦϓϨΠϑΣʔζ String result = StaticMethod.staticMethod(); // ݕূϑΣʔζ assertThat(result, is(expectedResult)); } public static String staticMethod() { return "abc"; } ΠϯελϯεϝιουͷϞοΫ ͱಉ͡Γํ
+.PDLJUษڧձ QSJWBUFϝιουͷϞοΫʢ̍ʣ w ςετରΫϥε public class PrivateMethod { private PrivateMethod()
{ } private final int privateMethod() { return 10; } private static final int privateStaticMethod() { return 20; } }
+.PDLJUษڧձ QSJWBUFϝιουͷϞοΫʢ̎ʣ w ςετΫϥε @Test public void testPrivateMethod(@Mocked PrivateMethod target)
{ // هϑΣʔζ int expectedPrivateMethodResult = 11; int expectedPrivateStaticMethodResult = 21; new Expectations() {{ Deencapsulation.invoke(target, "privateMethod"); result = expectedPrivateMethodResult; Deencapsulation.invoke(PrivateMethod.class, "privateStaticMethod"); result = expectedPrivateStaticMethodResult; }}; // ϦϓϨΠϑΣʔζ PrivateMethod tested = Deencapsulation.newInstance(PrivateMethod.class); int privateMethodResult = Deencapsulation.invoke(tested, "privateMethod"); int privateStaticMethodResult = Deencapsulation.invoke(tested, "privateStaticMethod"); // ݕূϑΣʔζ assertThat(privateMethodResult, is(expectedPrivateMethodResult)); assertThat(privateStaticMethodResult, is(expectedPrivateStaticMethodResult)); }
+.PDLJUษڧձ ίϯετϥΫλͷϞοΫʢ̍ʣ w ςετΫϥε @Test public void testGetCurrentDate() { //
ظ2015/05/05 Calendar c = Calendar.getInstance(); c.set(2015, 4, 5); Date expected = c.getTime(); // هϑΣʔζ new MockUp<Date>() { @Mock public void $init() { this.getMockInstance().setTime(expected.getTime()); } }; // ϦϓϨΠϑΣʔζ String strDate = DateUtil.getCurrentDate(); // ݕূϑΣʔζ assertThat(strDate, is("2015/05/05")); } ίϯετϥΫλͷڍಈΛม͑Δ ʹɺ.PDLVQT"1*͕ඞཁɻ ʢྫ֎Λ͛Δ͚ͩͳΒɺ &YQFDUBUJPOT"1*ͰՄʣ
+.PDLJUษڧձ ίϯετϥΫλͷϞοΫʢ̎ʣ w ίϯετϥΫλͷεύΠʢϥούʔΛඃͤΔʣ public static Date getDateInstance() { return
new Date(); } public static Date getDateInstance(long time) { return new Date(time); } @Test public void testConstructor2() throws IOException { // هϑΣʔζ new MockUp<DateWrapper>() { @Mock Date getDateInstance(Invocation inv) { System.out.println("getDateInstance"); return inv.proceed(); } @Mock Date getDateInstance(Invocation inv, long time) { System.out.println("getDateInstance(" + time + ")"); return inv.proceed(); } }; JOJUͰQSPDFFEͯ͠ಈ࡞͠ͳ ͍Β͍͠ɻɻ
+.PDLJUษڧձ ҾʹԠͨ͡ϞοΫಈ࡞ͷมߋʢ̍ʣ w ςετΫϥε @Test public void testSystemGetProperties(@Mocked System system)
{ // هϑΣʔζ new Expectations() {{ System.getProperty("os.name"); result = "Mocked os.name"; System.getProperty("user.name"); result = "Mocked user.name"; }}; // ϦϓϨΠϑΣʔζ String osName = System.getProperty("os.name"); String userName = System.getProperty("user.name"); // ݕূϑΣʔζ assertThat(osName, is("Mocked os.name")); assertThat(userName, is("Mocked user.name")); } ಉ͡4ZTUFNHFU1SPQFSUZϝ ιουʹରͯ͠ɺҾʹԠͨ͡Ϟο Ϋಈ࡞Λఆ͍ٛͯ͠Δɻ
+.PDLJUษڧձ ҾʹԠͨ͡ϞοΫಈ࡞ͷมߋʢ̎ʣ w ҾͷϚονʹ͑Δఆ ܕ ఆ 0CKFDU BOZ #PPMFBO BOZ#PPMFBO
#ZUF BOZ#ZUF $IBSBDUFS BOZ$IBS %PVCMF BOZ%PVCMF 'MPBU BOZ'MPBU *OUFHFS BOZ*OU -POH BOZ-POH 4IPSU BOZ4IPSU 4USJOH BOZ4USJOH
+.PDLJUษڧձ ݺͼग़͠ճʹԠͨ͡ϞοΫಈ࡞ͷมߋʢ̍ʣ w ݺͼग़͠ճͰΓͷΓସ͑ @Test public void testSystemGetProperties(@Mocked System system)
{ // هϑΣʔζ new Expectations() {{ System.getProperty("os.name"); returns("Mocked os.name", "Mocked os.name2"); }}; // ϦϓϨΠϑΣʔζ String osName = System.getProperty("os.name"); String osName2 = System.getProperty("os.name"); String osName3 = System.getProperty("os.name"); // ݕূϑΣʔζ assertThat(osName, is("Mocked os.name")); assertThat(osName2, is("Mocked os.name2")); assertThat(osName3, is("Mocked os.name2")); } SFUVSOTΛ͏͜ͱͰɺݺͼग़͠ ճʹԠͨ݁͡ՌΛฦͤΔ ʢճҎ߱ճͱಉ͡ʣ
+.PDLJUษڧձ ݺͼग़͠ճʹԠͨ͡ϞοΫಈ࡞ͷมߋʢ̎ʣ w ݺͼग़͠ճͰϞοΫʗϦΞϧͷΓସ͑ @Test public void testSystemGetPropertiesMockupAPI() { String
realOsName = System.getProperty("os.name"); // هϑΣʔζ new MockUp<System>() { @Mock String getProperty(Invocation inv, String key) { if(inv.getInvocationCount() < 2) { return "Mocked property"; } else { return inv.proceed(); } } }; // ϦϓϨΠϑΣʔζ String osName = System.getProperty("os.name"); String osName2 = System.getProperty("os.name"); // ݕূϑΣʔζ assertThat(osName, is("Mocked property")); assertThat(osName2, is(realOsName)); } ճ·ͰϞοΫͨ݁͠Ռɺ ճҎ߱ϦΞϧϝιουͷ݁Ռ Λฦ͢ɻ ˞*OWPDBUJPO൪ͷҾʹ͢ Δඞཁ͕͋Δɻ ˞ޙड़ͷҾʹΑͬͯϞοΫʗϦ ΞϧΛݺͼ͚Δํ๏ΛΈ߹Θ ͤΔ͜ͱՄೳ
+.PDLJUษڧձ ෦ϞοΫʢ̍ʣ w ϝιου୯ҐͰϞοΫʗϦΞϧͷΓସ͑ @Test public void testPartialMock(@Mocked("getProperty") System system)
{ // هϑΣʔζ new Expectations() {{ System.getProperty(“os.name"); result = "Mocked os.name"; }}; // ϦϓϨΠϑΣʔζ String osName = System.getProperty("os.name"); String realOsName = System.getProperties().getProperty("os.name"); // ݕূϑΣʔζ assertThat(osName, is("Mocked os.name")); System.out.println(realOsName); } HFU1SPQFSUZϝιουͷΈϞο Ϋ͞ΕΔɻͦΕҎ֎ͷϝιου ϦΞϧϝιου͕ݺΕΔɻ
+.PDLJUษڧձ ෦ϞοΫʢ̎ʣ w Πϯελϯε୯ҐͰϞοΫʗϦΞϧͷΓସ͑ @Test public void testPartialMock(@Injectable Date date)
{ // هϑΣʔζ new Expectations() {{ date.getTime(); result = 1234567890L; }}; // ϦϓϨΠϑΣʔζ long mockedTime = date.getTime(); long realTime = new Date(2234567890L).getTime(); // ݕূϑΣʔζ assertThat(mockedTime, is(1234567890L)); assertThat(realTime, is(2234567890L)); } !.PDLͷΘΓʹ!*OKFDUBCMF Λ͏ͱɺͦͷΠϯελϯεͷΈ ϞοΫ͞ΕΔɻ ϞοΫ͞Ε͍ͯΔEBUFͱผʹ ΠϯελϯεΛ࡞ͨͨ͠ΊɺϞο Ϋ͞Ε͍ͯͳ͍ϦΞϧ࣮͕ݺ ΕΔɻ
+.PDLJUษڧձ ෦ϞοΫʢ̏ʣ w ҾʹԠͯ͡ϞοΫʗϦΞϧͷΓସ͑ @Test public void testDynamicPartialMock() { //
هϑΣʔζ new MockUp<System>() { @Mock String getProperty(Invocation inv, String key) { if("os.name".equals(key)) { return "Mocked os.name"; } else { return inv.proceed(); } } }; // ϦϓϨΠϑΣʔζ String osName = System.getProperty("os.name"); String realUserName = System.getProperty("user.name"); // ݕূϑΣʔζ assertThat(osName, is("Mocked os.name")); System.out.println(realUserName); } HFU1SPQFSUZϝιουͷҾ ͕zPTOBNFzͷ߹ϞοΫɺͦ ΕҎ֎ͷ߹ϦΞϧϝιουͷ ݁ՌΛฦ͢ɻ ˞*OWPDBUJPO൪ͷҾʹ͢ Δඞཁ͕͋Δɻ
+.PDLJUษڧձ ࢀߟαΠτ w +.PDLJU.PDLJOH5PPMLJU$PNQBSJTPO.BUSJY w IUUQKNPDLJUPSH.PDLJOH5PPMLJU$PNQBSJTPO.BUSJYIUNM w +.PDLJU5VUPSJBM w IUUQKNPDLJUPSHUVUPSJBMIUNM
w QPXFSNPDL w IUUQTDPEFHPPHMFDPNQQPXFSNPDL w ςετμϒϧ8JLJQFEJB w IUUQKBXJLJQFEJBPSHXJLJςετμϒϧ