具有共同行为的测试类

时间:2013-09-11 18:52:03

标签: java testing class-constants hybris

我必须在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());

如果我不这样做,测试类中会有很多重复。

我怀疑这是否可以接受,因为抽象类往往是漫长而丰富的方法,或者我需要改变设计。 我想避免为每组常量创建单独的类。

2 个答案:

答案 0 :(得分:0)

如何将其创建为BaseTest抽象类(就像您的AbstractTest一样),并具有您在所有测试中所需的所有必要功能。然后,您可以简单地扩展抽象类以继承其所有属性,并根据您的特定测试编写任何其他功能。 像DefaultUserTest extends BaseTest { protected UserModel createDefaultUser() {} }

这样的东西

答案 1 :(得分:0)

我认为完全可以使用基本测试类来处理公共代码,然后在每个Test类中扩展它。实际上,测试策略应该与项目代码的设计一致。我相信你的项目模块也会有一些共同的代码,你的常见测试部分基本上映射到项目代码的那些功能。

我在几个项目中做过类似的设计而没有任何问题。

因此,每当您的项目对常用功能进行更改时,它都会影响常见测试类中的测试用例,而具体更改则会针对特定测试类。