0

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

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

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

4

2 回答 2

0

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

于 2013-09-11T18:59:16.013 回答
0

我认为为您的公共代码使用基本测试类然后在每个测试类中扩展它是完全可以的。事实上,测试策略应该与项目代码的设计保持一致。我确信您的项目模块也会有一些通用代码,您的通用测试部分基本上映射到项目代码的那些功能。

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

因此,每当您的项目的通用功能发生变化时,它都会影响通用测试类中的测试用例,而特定的更改会随着特定的测试类而发生。

于 2013-09-11T19:09:47.473 回答