java—如何为依赖关系较少的服务层编写集成测试

hgb9j2n6  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(291)

我有两节课

@Service
public class A {

}

@Service
public class B {
    @Autowired
    private A a;
}

我想写一个集成测试,将测试我的b类。我不想加载整个spring-boot应用程序,所以@springboottest注解对我不起作用。我尝试使用@webmvctest注解,但它也在加载其他类。
有没有办法只加载某些类或包?

vmjh9lq9

vmjh9lq91#

我只知道如何使用testng来完成这个任务,您的测试类应该扩展 AbstractTestNGSpringContextTests . 现在您还可以添加 Bean 和配置,以便您可以模拟 @Autowired 对象,如果需要,它应该类似于下面的一个。
例子:

@ContextConfiguration(classes = {MyTest.TestConfig.class})
class MyTest extends AbstractTestNGSpringContextTests {
    private A mockA = mock(A.class);

    @Autowired
    private B b;

    @Configuration
    static class TestConfig {
        @Bean
        public A a() {
            return mockA;
        }

        @Bean
        public B b() {
            return new B();
        }
    }
}
gijlo24d

gijlo24d2#

不在给定测试类型(例如单元测试)范围内的模拟依赖项:

@RunWith(MockitoJUnitRunner.class)
public class BTest {
    @Mock
    private A aMock;

    @InjectMocks
    private B bService;

    @Test
    public void testStuff() { ... }
}

在上面的测试中,我用 @Mock 它是b服务的一个依赖项。然后注入模拟 B 通过 @InjectMocks . 然后,您可以从 B 在嘲笑别人的时候 A .

bxpogfeg

bxpogfeg3#

我找到了部分答案。

@SpringBootTest(classes = {A.class, B.class})
public class BTest {

    @Autowired
    private B b;
}

如果您的依赖关系很少,可以使用这种方法,但我没有找到启用包初始化的解决方案。

相关问题