junit - Testing spring bean with post construct -


i have bean similar this:

@service public class {     @autowired     private b b;         @postconstruct     public void setup() {        b.call(param);     } }  @runwith(springjunit4classrunner.class) @springapplicationconfiguration(classes = { application.class, config.class }) @webintegrationtest(randomport = true) public class test {     @autowired     b b;     @before     public void setup() throws exception {         when(b.call(any())).thenreturn("smth");     }     @test     public void test() throws exception {         // test...     } } 

the problem postconstruct called before setup when test run.

if want write unit test of a, don't use spring. instead, instantiate a , pass stub/mock of b (either using constructor injection or reflectiontestutils set private field).

for example:

@service public class {      private final b b;          @autowired     public a(b b) {         this.b = b;     }      @postconstruct     public void setup() {        b.call(param);     } } 

-

public class test {      @test     public void test() throws exception {         b b = mock(b);         a = new a(b);         // write tests     }  } 

if have use spring, because want write integration test, use different application context, replace b stub/mock.

for example, assuming b instantiated in production class this:

@configuration public class production {      @bean     public b b() {         return new b();     }  } 

write @configuration class tests:

@configuration public class tests {      @bean     public b b() {         // using mockito example         b b = mockito.mock(b.class);          mockito.when(b).thenreturn("smth");          return b;     }  } 

reference in test @springapplicationconfiguration annotation:

@springapplicationconfiguration(classes = { application.class, tests.class }) 

Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -

Nuget pack csproj using nuspec -