我必须在Hybris Commerce Suite中编写一些集成测试类,其中大多数都有共同的行为来设置系统(站点,存储,目录,国家,......)或执行一些常见操作,如创建顾客。
我创建了一个抽象类,它使用@Before方法中的常量值和createDefaultCustomer()等常用方法执行所有初始化。
我所有的测试类都继承自这个类。
常量值分为不同的常量类,如
abstract class AbstractTest {
protected static final class USER_CONSTANTS {
};
protected static final class CATALOG_CONSTANTS {
};
protected UserModel createDefaultUser() {
}
}
现在,为了测试,在我的子类中我可以做到
createDefaultUser();
UserData userData = userFacade.getUserById(USER_CONSTANTS.ID);
assertEquals(USER_CONSTANTS.ID, userData.getId());
如果我不这样做,测试类中会有很多重复。
我怀疑这是否可以接受,因为抽象类往往是漫长而丰富的方法,或者我需要改变设计。 我想避免为每组常量创建单独的类。
答案 0 :(得分:0)
如何将其创建为BaseTest
抽象类(就像您的AbstractTest一样),并具有您在所有测试中所需的所有必要功能。然后,您可以简单地扩展抽象类以继承其所有属性,并根据您的特定测试编写任何其他功能。
像DefaultUserTest extends BaseTest { protected UserModel createDefaultUser() {} }
答案 1 :(得分:0)
我认为完全可以使用基本测试类来处理公共代码,然后在每个Test类中扩展它。实际上,测试策略应该与项目代码的设计一致。我相信你的项目模块也会有一些共同的代码,你的常见测试部分基本上映射到项目代码的那些功能。
我在几个项目中做过类似的设计而没有任何问题。
因此,每当您的项目对常用功能进行更改时,它都会影响常见测试类中的测试用例,而具体更改则会针对特定测试类。