encoding - mock java.nio.file.Paths.get do nothing but throw InvalidPathException -
i have 2 line of code:
file file = new file("report_はな.html"); path path = paths.get(file.getcanonicalpath()); is there anyway can mock static method:
paths.get(file.getcanonicalpath()); and throw exception invalidpathexception?
i tried powermockito, seems not working
powermockito.mockstatic(paths.class); powermockito.doreturn(null).dothrow(new invalidpathexception("","")).when(paths.class); the whole idea trying reproduce bug under english mac, mac default encoding setting us-ascii, path path = paths.get("report_はな.html"); throw invalidpathexception.
as documented here, have jump through hoops mock "system" classes, i.e. classes loaded system classloader.
specifically, whereas in normal powermock test @preparefortest() annotation identifies class static methods want mock, in "system" powermock test annotation needs identify class calls static methods (usually class under test).
for instance, have following class:
public class foo { public static path doget(file f) throws ioexception { try { return paths.get(f.getcanonicalpath()); } catch (invalidpathexception e) { return null; } } } we want test class in fact return null if paths.get() throws invalidpathexception. test this, write:
@runwith(powermockrunner.class) // <- important! @preparefortest(foo.class) // <- note: foo.class, not paths.class public class footest { @test public void dogetreturnsnullforinvalidpathexception() throws ioexception { // enable static mocking on paths powermockito.mockstatic(paths.class); // make paths.get() throw ipe arguments mockito.when(paths.get(any(string.class))) .thenthrow(new invalidpathexception("", "")); // assert method invoking paths.get() returns null assertthat(foo.doget(new file("foo"))).isnull(); } } note: wrote paths.get(any(string.class)) mock more specific if need be, e.g. paths.get("foo")) or paths.get(new file("report_はな.html").getcanonicalpath()).
Comments
Post a Comment