我正在使用:
- Spring框架
4.3.10
- JUnit
4.12
- Gradle
4.3.1
我有这两个测试类:
@Transactional
@RunWith(Parameterized.class)
@ContextConfiguration(classes={RootApplicationContext.class})
@ActiveProfiles(resolver=TestJdbcActiveProfilesResolver.class)
@TestExecutionListeners(listeners={LoggingTestExecutionListener.class}, mergeMode=MergeMode.MERGE_WITH_DEFAULTS)
public class PersonaServiceImplJdbcTest {
@Transactional
@RunWith(Parameterized.class)
@ContextConfiguration(classes={RootApplicationContext.class})
@ActiveProfiles(resolver=TestHibernateActiveProfilesResolver.class)
@TestExecutionListeners(listeners={LoggingTestExecutionListener.class}, mergeMode=MergeMode.MERGE_WITH_DEFAULTS)
public class PersonaServiceImplHibernateTest {
关于
@Test
方法的代码在两个测试类中是相同的,这违反了 DRY
原则。这两个测试类之间唯一的区别在于 jdbc
和 Hibernate
配置文件与其他配置文件(例如 development, mysql
)一起使用,它们内部通过每个 TestXXXActiveProfilesResolver
类的变化来实现。到目前为止,我有 2 个测试类,违反了
DRY
原则,如果按层次思考,我将得到 3 个测试类。如何(如果可能)使用一个测试类,在每个交互中执行两个(或更多)设置文件,例如:
jdbc,development,mysql
Hibernate,development,mysql
Maven
还是 Gradle
,而是通过 TestXXXActiveProfilesResolver
类来保持控制。