Home > OS >  java bootstrap mock with ConditionalOnProperty and Autowired member
java bootstrap mock with ConditionalOnProperty and Autowired member

Time:12-31

I have an object that looks like this:

@Service
@ConditionalOnProperty(
        name="name",
        havingValue = "true"
)
public class MyClass{

    @Autowired(required = false)
    private SomeObject someObject;
}

And I have this in my test file:

@ExtendWith({SpringExtension.class})
@ContextConfiguration(classes = {MyClass.class}, loader = AnnotationConfigContextLoader.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class MyTest {

    MyClass myClass;

    @Autowired
    @ConditionalOnProperty(
            name = "name",
            havingValue = "true"
    )
        static MyClass getMyClass(){
        return new MyClass();
    }
}

    @MockBean
    static SomeObject someObject;

    @BeforeAll
    public void before() {
        myClass = MyTest.getMyClass()
        when(someObject.someFunc()).thenReturn(1);
    }
}

I'm using this function because just using @Autowired and @MockBean on the SomeObject didn't work because of the @ConditionalOnProperty.

The problem is that inside MyClass, someObject is null.

CodePudding user response:

No need to use static MyClass getMyClass() use:

@ExtendWith({SpringExtension.class})
@ContextConfiguration(classes = {MyClass.class, SomeObject.class, loader = AnnotationConfigContextLoader.class)
@SpringBootTest(properties = "name=true")
public class MyTest{
@Autowired
MyClass
@Autowired myClass;
SomeObject someObject;
}
  • Related