微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为几乎没有依赖的服务层编写集成测试

如何解决如何为几乎没有依赖的服务层编写集成测试

我有两个班

@Service
public class A {

}

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

我想编写一个集成测试来测试我的 B 类。我不想加载整个 Spring Boot 应用程序,所以 @SpringBoottest 注释对我不起作用。我曾尝试使用 @WebMvcTest 注释,但它也在加载其他类。

有没有办法只加载某些类或包?

解决方法

我只知道如何用 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();
        }
    }
}
,

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

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

    @InjectMocks
    private B bService;
    
    @Test
    public void testStuff() { ... }
}

在上面的测试中,我用 @Mock 模拟了 A 服务,B 是 B 服务的依赖项。然后通过 @InjectMocks 将模拟注入 B。然后,您可以在模拟 A 中的方法的同时测试 {{1}} 中的方法。

,

我找到了部分答案。

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

    @Autowired
    private B b;
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。