Mockbean, содержащее автопроводную зависимость - PullRequest
0 голосов
/ 06 марта 2019

Я тестирую класс, который зависит от bean-компонента.В рамках теста я смоделировал бин, но у мобина тоже есть своя @Autowired зависимость.Можно ли как-нибудь удовлетворить эту зависимость?Как и сейчас, зависимость @Autowired равна null , когда вызывается метод в макете.

Пример:

public class testclass {
    @Autowired
    private ClassToTest classToTest;
    @MockBean
    private DependencyOfClassToTest dependencyOfClassToTest;
    @Mockbean
    private MyOwnDependencyINeedHereInTheMock myOwnDependencyINeedHereInTheMock;
}

public class DependencyOfClassToTest {
    @Autowired
    private MyOwnDependencyINeedHereInTheMock myOwnDependencyINeedHereInTheMock;
}

Как видно над макетом beanсодержит @Autowired зависимость.

Есть ли какие-либо решения для этого или я нарушаю какое-то правило тестирования?

Когда вызывается реальный метод в проверяемом компоненте, он вызывает myOwnDependencyINeedHereInTheMock , который будет нулевым, потому что это макет.

MockBeans не нулевой в классе @Autowired, хотя они обнаруживаются Spring Boot.

1 Ответ

0 голосов
/ 06 марта 2019

Mock the bean тоже!

    public class testclass {
        @Autowired
        private ClassToTest classToTest;
        @MockBean
        private DependencyOfClassToTest dependencyOfClassToTest;
        @MockBean
        private MyOwnDependencyINeedHereInTheMock myOwnDependencyINeedHereInTheMock;
    }

    public class DependencyOfClassToTest {
        @Autowired
        private MyOwnDependencyINeedHereInTheMock myOwnDependencyINeedHereInTheMock;
    }

update : у меня работает тестовый класс ниже

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {

    @Autowired
    private ClassToTest classToTest;
    @MockBean
    private DependencyOfClassToTest dependencyOfClassToTest;
    @MockBean
    private MyOwnDependencyINeedHereInTheMock myOwnDependencyINeedHereInTheMock;

    @Test
    public void contextLoads() {

        System.out.println("test"+myOwnDependencyINeedHereInTheMock);
    }



    @TestConfiguration  
    static class Context{

        @Component
         static class ClassToTest{

            @Autowired
            private DependencyOfClassToTest  dependencyOfClassToTest;
        }

        @Component
         static class DependencyOfClassToTest{
            @Autowired
            private MyOwnDependencyINeedHereInTheMock myOwnDependencyINeedHereInTheMock;


        }

        @Component
         static class MyOwnDependencyINeedHereInTheMock{

        }


    }
}
...