spring - 在不同项目中使用多个 Spring 上下文运行 JUnit 测试

标签 spring junit spring-test

我有一个通用代码库,需要使用不同的实现和运行时配置进行测试。考虑具有多个 DAO 实现的服务。我有测试 Dao 接口(interface)的通用单元测试(需要 Autowiring Dao),我想从不同的项目中调用它们。

基本上我想要这样的东西。
在共享的通用项目中,我的测试将生效。
所以本质上,例如,在共享项目中,我有我的测试。

public class ApiTest {

@Autowired
DaoBase myDao;

    @Test
    public void testSomething(){
    }
}

然后在实现道的其他项目中,我会:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { ImplementationConfigA.class })
public class ImplemtationTesterA {

  //somehow invoke ApiTest.class?
}

.
@Configuration
public class ImplementationConfigA{
    @Bean 
    DaoBase daoBase {
        return new DaoImplementationGraphDB(); 
    }
}

同样,有多个项目以不同的方式实现 DAO 层,我想分享通用测试。

如果我可以结合@RunWith(SpringJUnit4ClassRunner.class) 和@RunWith(Suite.class),这正是我想要的,但这似乎是不可能的。即这实际上是我想要的,这是不可能的:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { ImplementationConfigA.class })
@RunWith(Suite.class)
@Suite.SuiteClasses({   ApiTest.class })
public class ImplemtationTesterA {
...

必须有一个技巧才能使这样的事情起作用..有什么想法吗?谢谢!

最佳答案

使用profiles

@Configuration
@Profile("profileA")
public class ImplementationConfigA{
    @Bean 
    DaoBase daoBase {
        return new DaoImplementationGraphDB(); 
    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { ImplementationConfigA.class })
@RunWith(Suite.class)
@Suite.SuiteClasses({   ApiTest.class })
@ActiveProfiles("profileA");
public class ImplemtationTesterA {
...

关于spring - 在不同项目中使用多个 Spring 上下文运行 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44501869/

相关文章:

java - 将 spring 从 4.3.x 降级到 3.2.x 后,spock 测试中的 Autowiring bean 为空

java - 如何在 Spring Maven 中通过 Junit 测试获取 Spring 配置

java - 如何像在 Java EE 6 中一样在 Spring 3 中获取实体管理器

java - 每次测试后重新加载 Spring 应用程序上下文

java - 用于自动化测试的嵌入式 jetty

java - 加载测试文件仅在使用 ClassLoader 时有效

java - 在@Before 方法中停止 JUnit 测试而不失败

Spring Security Unit Test - MockMvc 使用自定义用户执行测试

java - 在 Spring 的构建后阶段之前注入(inject) mock

java - Spring 中的服务器发送事件客户端示例